写点什么

HBase 三个重要机制

发布于: 2021 年 04 月 10 日
HBase三个重要机制

1、flush 机制

1.(hbase.regionserver.global.memstore.size)默认;堆大小的 40%

regionServer 的全局 memstore 的大小,超过该大小会触发 flush 到磁盘的操作,默认是堆大小的 40%,而且 regionserver 级别的 flush 会阻塞客户端读写

 

2.(hbase.hregion.memstore.flush.size)默认:128M

单个 region 里 memstore 的缓存大小,超过那么整个 HRegion 就会 flush,

 

3.(hbase.regionserver.optionalcacheflushinterval)默认:1h

内存中的文件在自动刷新之前能够存活的最长时间

 

4.(hbase.regionserver.global.memstore.size.lower.limit)默认:堆大小* 0.4 * 0.95

有时候集群的“写负载”非常高,写入量一直超过 flush 的量,这时,我们就希望 memstore 不要超过一定的安全设置。在这种情况下,写操作就要被阻塞一直到 memstore 恢复到一个“可管理”的大小,这个大小就是默认值是堆大小* 0.4 * 0.95,也就是当 regionserver 级别的 flush 操作发送后,会阻塞客户端写,一直阻塞到整个 regionserver 级别的 memstore 的大小为 堆大小* 0.4 *0.95 为止

 

5.(hbase.hregion.preclose.flush.size)默认为:5M

当一个 region 中的 memstore 的大小大于这个值的时候,我们又触发了 region 的 close 时,会先运行“pre-flush”操作,清理这个需要关闭的 memstore,然后 将这个 region 下线。当一个 region 下线了,我们无法再进行任何写操作。 如果一个 memstore 很大的时候,flush  操作会消耗很多时间。"pre-flush"操作意味着在 region 下线之前,会先把 memstore 清空。这样在最终执行 close 操作的时候,flush 操作会很快。

 

6.(hbase.hstore.compactionThreshold)默认:超过 3 个

一个 store 里面允许存的 hfile 的个数,超过这个个数会被写到新的一个 hfile 里面 也即是每个 region 的每个列族对应的 memstore 在 flush 为 hfile 的时候,默认情况下当超过 3 个 hfile 的时候就会对这些文件进行合并重写为一个新文件,设置个数越大可以减少触发合并的时间,但是每次合并的时间就会越长

2、 compact 机制

http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.14.0/book.html#compaction

 

把小的 storeFile 文件合并成大的 HFile 文件。

清理过期的数据,包括删除的数据

将数据的版本号保存为 1 个

3、split 机制

当 Region 达到阈值,会把过大的 Region 一分为二。

默认一个 HFile 达到 10Gb 的时候就会进行切分

Master 工作机制

Ø master 上线

master 启动进行以下步骤:

1 从 zookeeper 上获取唯一一个代表 active master 的锁,用来阻止其它 master 成为 master。

2 扫描 zookeeper 上的 server 父节点,获得当前可用的 region server 列表。

3 和每个 region server 通信,获得当前已分配的 region 和 region server 的对应关系。

4 扫描.META.region 的集合,计算得到当前还未分配的 region,将他们放入待分配 region 列表。

 

Ø master 下线

由于 master 只维护表和 region 的元数据,而不参与表数据 IO 的过程,master 下线仅导致所有元数据的修改被冻结(无法创建删除表,无法修改表的 schema,无法进行 region 的负载均衡,无法处理 region 上下线,无法进行 region 的合并,唯一例外的是 region 的 split 可以正常进行,因为只有 region server 参与),表的数据读写还可以正常进行。因此 master 下线短时间内对整个 hbase 集群没有影响。

从上线过程可以看到,master 保存的信息全是可以冗余信息(都可以从系统其它地方收集到或者计算出来)

因此,一般 hbase 集群中总是有一个 master 在提供服务,还有一个以上的‘master’在等待时机抢占它的位置。

发布于: 2021 年 04 月 10 日阅读数: 11
用户头像

公众号:五分钟学大数据 2020.11.10 加入

大数据领域原创技术号,专注于大数据技术

评论

发布
暂无评论
HBase三个重要机制