Hbase 笔记(5) 客户端API 管理功能

时间:2021-08-19 23:29:18

1、创建表

 hbaseAdmin.createTable(htableDescriptor);
hbaseAdmin.createTable(htableDescriptor, splitKeys);
hbaseAdmin.createTable(htableDescriptor, startKey,endKey, numRegions);

hbaseAdmin.createTableAsync(htableDescriptor,splitKeys);


2、表是否存在:hbaseAdmin.tableExists(strTableName)


3、修改表结构 

先禁用,再启用

        HTableDescriptor tableDescriptor = hbaseAdmin.getTableDescriptor(Bytes.toBytes(strTableName));
        tableDescriptor.addFamily(new HColumnDescriptor("cf3"));
        tableDescriptor.setMaxFileSize(1024*1024*1024L);
        hbaseAdmin.disableTable(strTableName);
        hbaseAdmin.modifyTable(strTableName, tableDescriptor);
        hbaseAdmin.enableTable(strTableName);


4、集群管理

hbaseAdmin.closeRegion(regionName, hostAnfPort);  // 关闭 Region

hbaseAdmin.flush(strTableNameOrRegion);                      //Fulsh 表或Region

hbaseAdmin.compact(strTableNameOrRegion);                // 合并 表或Region

hbaseAdmin.majorCompact(strTableNameOrRegion);     //Major 合并表或Region

hbaseAdmin.split(strTableNameOrRegion , splitPoint);     //分割表或Region

hbaseAdmin.aggign(region, force);                                 // 上线Region

hbaseAdmin.unaggign(region , force);                           //下线 Region

hbaseAdmin.move(regionName , RegionServer);      //移动 Region

hbaseAdmin.balancer()                                                    // 负载均衡

hbaseAdmin.balanceSwitch( boolean open)               // 开启/关闭负载均衡

hbaseAdmin.shutdown()

hbaseAdmin.shopMaster()                        

hbaseAdmin.shopRegionServer()


5. 获取集群状态

一堆get方法。


6、表、列族的属性

创建表代码

            HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);
 
            HTableDescriptor htableDescriptor = new HTableDescriptor(TableName.valueOf(strTableName));

            htableDescriptor.setMaxFileSize(1024 * 1024 * 1024L);
            htableDescriptor.setReadOnly(false);
            htableDescriptor.setMemStoreFlushSize(1024 * 1024L);
            htableDescriptor.setDeferredLogFlush(false);

            HColumnDescriptor cf1 = new HColumnDescriptor("cf1");
            HColumnDescriptor cf2 = new HColumnDescriptor("cf2");

            cf1.setMaxVersions(100);
            cf2.setMaxVersions(999);
  
            cf1.setBlocksize(64 * 1024);
            cf2.setBlocksize(64 * 1024);
          
            cf1.setCompressionType(Compression.Algorithm.SNAPPY);
            cf2.setCompressionType(Compression.Algorithm.SNAPPY);
            cf1.setCompactionCompressionType(Compression.Algorithm.SNAPPY);
            cf2.setCompactionCompressionType(Compression.Algorithm.SNAPPY);
            
            cf1.setBlockCacheEnabled(true);
            cf2.setBlockCacheEnabled(true);  
            
            cf1.setTimeToLive(Integer.MAX_VALUE);
            cf2.setTimeToLive(Integer.MAX_VALUE);
            
            cf1.setBloomFilterType(BloomType.ROW);
            cf2.setBloomFilterType(BloomType.NONE);
            
            cf1.setScope(1);
            cf2.setScope(0);       
            htableDescriptor.addFamily(cf1);
            htableDescriptor.addFamily(cf2);
            hbaseAdmin.createTable(htableDescriptor); 

(1).表名

 htableDescriptor.setName(TableName.valueOf("tableName"));

(2). 表的Region大小

 实际上是Region的大小,默认256M,超过该值将分裂

htableDescriptor.setMaxFileSize(1024*1024*1024L);

(3).表的只读

 htableDescriptor.setReadOnly(true);

(4). 表的memstore 刷写大小

写缓冲区,默认64M

htableDescriptor.setMemStoreFlushSize(1024*1024L);

(5).表的延时日志刷写

默认false

htableDescriptor.setDeferredLogFlush(false);

(6).列族的最大版本数 

默认3,可设为1,不访问旧数据

           cf1.setMaxVersions(1);
           cf2.setMaxVersions(999);
(7).列族压缩 

默认为NODE。CompressionType 是一般的压缩,CompactionCompressionType是合并压缩。

            cf1.setCompressionType(Compression.Algorithm.SNAPPY);
            cf2.setCompressionType(Compression.Algorithm.SNAPPY);
            
            cf1.setCompactionCompressionType(Compression.Algorithm.SNAPPY);
            cf2.setCompactionCompressionType(Compression.Algorithm.SNAPPY);

(8). 列族的块大小

默认64K

            cf1.setBlocksize(64*1024);
            cf2.setBlocksize(64*1024);

(9).列族的缓存块

HBase顺序地读取数据块到内存缓存中,减少磁盘I/O。

            cf1.setBlockCacheEnabled(true);
            cf2.setBlockCacheEnabled(true);

(10). 列族的版本生存期TTL

默认Integer.MAX_VALUE

             cf1.setTimeToLive(Integer.MAX_VALUE);
             cf2.setTimeToLive(Integer.MAX_VALUE);

(11).列族放置在内存中

适合于较小的列族,例如登陆的用户表,默认false。

             cf1.setInMemory(false);
             cf2.setInMemory(false);

(12). 列族的Bloom 过滤器

能够减少特定访问模式下的查询时间,但是增加了内存和存储的负担。默认关闭

            cf1.setBloomFilterType(BloomType.ROW);
            cf2.setBloomFilterType(BloomType.ROWCOL);
            //cf2.setBloomFilterType(BloomType.NONE);

(13).复制范围

0为本地, 1为全局

            cf1.setScope(1);
            cf2.setScope(0);