继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

HBase优化

慕姐8265434
关注TA
已关注
手记 1147
粉丝 221
获赞 1064

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:将经常一起查询的列放在一个列簇中

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



作者:小小少年Boy
链接:https://www.jianshu.com/p/1a8820c0f5ca


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP