美文网首页
HBase的应用关键点

HBase的应用关键点

作者: 掩流年 | 来源:发表于2020-12-20 15:24 被阅读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);
    

    表设计关键点

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

    • 每个region的size保持在10--50G
    • 每个cell最好不要超过10MB,如果使用HBaseMob,不要超过50MB。否则,直接存储数据到HDFS上,然后存储一个指标索引到HBase中。
    • 一个典型的表设计在1--3个列簇。
    • 一张表中region数量最好在50--100个,一个region上存储的是列簇数据的连续段。
    • 保证列簇的名字尽可能的短,列簇名在每个value中都有存储,不要认为它类似于RDBMS表中的列名一样,具备解释说明的含义。
    • 如果说rowkey的设计是基于时间线或者日志信息来设计的,对表操作的读写,基本会落在新region上,较旧的数据不会进行太多读写操作,这时候可以允许多region的存储。
    • 如果只有一个列簇有比较大规模的写入请求,且只有写入请求占用内存,这时候可以调配内存资源在写入模式上。

    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的大小。

    相关文章

      网友评论

          本文标题:HBase的应用关键点

          本文链接:https://www.haomeiwen.com/subject/uacknktx.html