HBase的应用关键点

2020-12-20  本文已影响0人  掩流年

表创建

HBase的表创建可以通过hbase shellJava API。另外如果需要对列簇进行修改的时候,需要先去disable表。
通过Java API修改列簇例如

Configuration config = HBaseConfiguration.create();
Admin admin = new Admin(conf);
TableName table = TableName.valueOf("myTable");

admin.disableTable(table);

HColumnDescriptor cf1 = ...;
admin.addColumn(table, cf1);      // adding new ColumnFamily
HColumnDescriptor cf2 = ...;
admin.modifyColumn(table, cf2);    // modifying existing ColumnFamily

admin.enableTable(table);

表设计关键点

因为数据集千差万别,有很多不同的期望,所以根据官网的这些经验只是作为一个参考。

RegionServer的设计关键点

Personally I would place the maximum disk space per machine that can be served exclusively with HBase around 6T, unless you have a very read-heavy workload. In that case the Java heap should be 32GB (20G regions, 128M memstores, the rest defaults).
— Lars Hofhansl

从这段指导原则来看,我们在搭建HBase集群的时候,尽可能的使用大机器来做regionserver。对于写操作而言,每个region 20G大小,可以设置128M的memstores。

列簇的设计

对于列簇而言,设计原则是尽可能的少,如果是有两个列簇,尽可能的保证数量size一致。因为如果一个列簇A行有100万,列簇B行有10亿。这时候因为列簇A分配在多个region上,会导致其scan的效率过低。

rowkey的设计

rowkey的设计关键点就是防止热点数据的产生,也就防止把数据都集中在少数的region上,导致读写效率的问题。要设计一个好的rowkey,就需要给rowkey进行Salting,通用的方式就是使用散列算法添加前缀。例如:

a-foo0003
b-foo0001
c-foo0003
c-foo0004
d-foo0002

关于rowkey的设计还有很多需要注意的地方,在此不做展开讨论。

版本的设计

不建议将最大版本数设置为过高的水平(例如,数百个或更多),除非非常需要那些旧值,因为这会大大增加StoreFile的大小。

上一篇 下一篇

猜你喜欢

热点阅读