HBase架构、读写流程、rowkey设计、预分区、Region Split

目录

一、HBase 架构

二、Hbase 读写流程

三、StoreFile Compaction

四、Region Split

五、预分区

六、ROWKey设计


一、HBase 架构

  1. HLOG里面有 master、regionserver、wal(预写日志)

  2. 当有数据来了之后先查询HMaster 来获取向哪个HRegionserver中插入数据

  3. 数据来了之后先向HLog中写,然后写到Mem Store,达到默认64MB之后写入HFile

 

二、Hbase 读写流程

 

三、StoreFile Compaction

 

Compaction 分为两种,分别是Minor Compaction和 Major Compaction 。Minor Compaction会将临近的若干个较小的HFile合并成一个较大的HFile。但不会清理 过期和删除 的数据。Major Compaction 会将一个Store 下的所有的HFile合并成一个大HFile,并且会 清理掉过期和删除 的数据

四、Region Split

默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前Region Server,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的Region Server。

Region Split 时机 配置在 hbase-site.xml

     1. 当1个region中的某个Store下所有StoreFile的总大小超过  ==hbase.hregion.max.filesize== 该Region就会进行拆分  (0.94版本前)
     2. 当1个region中的某个Store下所有StoreFile的总大小超过 ==Min(R^3 * 2 * "hbase.hregion.memstore.flush.size",hbase.hregion.max.filesize)== ,该Region就会进行拆分,其中R为当前Region Server中属于该Table的个数 (0.94版本后)
     3. HBase2.0引入了新的Split策略:如果当前RegionServer上改表只有一个Region按照 ==2 * hbase.hregion.memstore.flush.size== 分裂,否则按照==hbase.hregion.max.filesize== 分裂

 

五、预分区

每一个region维护着StartRow与EndRow,如果加入的数据符合某个Region维护的RowKey范围,则该数据交给这个Region维护。那么依照这个原则,我们可以将数据索要投放的分区提前大致的规划好,以提高HBase性能。

     1. 手动预分区
     2. 生成16进制序列预分区
     3. 按照文件设置的规则预分区

六、ROWKey设计

一条数据的唯一标识就是RowKey,那么这条数据存储与哪个分区,取决于RowKey处于哪一个预分区的区间内,设计RowKey的主要目的就是让数据均匀的分布于所有的region中,在一定的程度上防止数据倾斜。

  1. 生成随机数、hash、散列值 (加盐)

  2. 字符串反转

  3. 字符串拼接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值