HBase优化

作者: 小小少年Boy | 来源:发表于2018-08-08 13:19 被阅读0次

    HBase优化

    1、垃圾回收优化
    使用CMS垃圾回收机制
    2、启用压缩
    GZIP、Snappy、LZO,推荐Snappy
    3、MemStore缓存配置

    4、Region拆分和合并
    预建分区,避免自动split,提高hbase响应速度
    5、Region均衡
    避免出现Region热点现象,按照table级别进行balance
    6、尽量只用1-3个列族
    定期建表,如每月中旬建立下一个月的表,表名中含有年月

    RowKey设计

    1、保证唯一性
    2、长度越短越好(加快再内存缓存时进行检索的效率)
    3、散列:(散列+时间戳 或者 MD5加密后取前六位)

    • rowkey均匀分布在各个hbase节点上,用MD5(用户ID/手机号/QQ号)取前几位+ (用户ID/手机号/QQ号) +发生时间(毫秒)+随机数,把数据打散到各Region;
    • 没有散列值,如时间字段作为Rowkey的起始,会导致热数据集中在一个RegionServer上;
    • 同一次查询的数据存储在一起;

    提前对表进行分区,防止Region Split
    Region数量计算
    确定按年/季/月建表,如果数据量特别大,不能只有1个表
    确定HFile最大大小,例如10G
    假设有1个列族,1个月的数据有5T
    则需要5T/(10G * 1)=512个Region

    预建分区可以多估一点,分裂时写入或查询数据很缓慢

    预分区?

    在创建Hbase表的时候默认一张表只有一个region,所有的put操作都会往这一个region中填充数据,这时所有的负裁都在同一台机器上,当这个一个region过大时就会进行split。如果在创建hbase的时候就进行预分区则会减少当数据量猛增时由于region split带来的资源消耗。

    HBase表的预分区需要紧密结合业务场景来选择分区的key值,每个region都有一个 startKey和一个endKey来表示该region存储的rowkey范围。如果知道hbase数据表的key的分布情况,就可以在建表的时候对hbase进行region的预分区,这样做的好处是防止太量数据插入的热点问题,提高数据插入的效率。

    创建预分区有两种方法
    1:采用Hbase自带的RegionSplitter()工具,它会通过MDS法生成MDS校验和,以此作为region的开始键;
    2:使用自定义分区算法进行预分区

    列簇设计原则???

    1:列簇不宜过多,1~3个。跨列簇查询效率低下。同一个列簇的数据放在一起的,因为flush和compact是以region为单位的。
    2:列簇的名字不宜过长
    3:将经常一起查询的列放在一个列簇中

    备注:因为列簇没有元数据的描述,所以想获取列簇的完整列名,则需要处理所有的行

    相关文章

      网友评论

        本文标题:HBase优化

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