HBase的工作机制详解

1. 读数据流程

在这里插入图片描述

  • 从zookeeper找到meta表的region的位置,然后读取meta表中的数据。而meta中又存储了用户表的region信息
  • 根据namespace、表名和rowkey根据meta表中的数据找到对应的region信息
  • 找到对应的regionserver,查找对应的region
  • 从MemStore找数据,再去BlockCache中找,如果没有,再到StoreFile上读
  • 可以把MemStore理解为一级缓存,BlockCache为二级缓存但注意scan的时候BlockCache意义不大,因为scan是顺序扫描

2. 写数据流程

在这里插入图片描述
HBase的数据存储过程是分为几个阶段的。写入的过程与HBase的LSM结构对应。

  • 为了提高HBase的写入速度,数据都是先写入**到MemStore(内存)**结构中
  • MemStore写到一定程度(默认128M),由后台程序将MemStore的内容flush刷写到HDFS中的StoreFile
  • 数据量较大时,会产生很多的StoreFile。这样对高效读取不利,HBase会将这些小的StoreFile合并,一般3-10个文件合并成一个更大的StoreFile

3. MemStore的溢写合并

在这里插入图片描述
解释:

  • 当MemStore写入的值变多,触发溢写操作(flush),进行文件的溢写,成为一个StoreFile
  • 当溢写的文件过多时,会触发文件的合并(Compact)操作,合并有两种方式(major,minor)

条件:

  • 一旦MemStore达到128M时,则触发Flush溢出(Region级别)

<property>
	<name>hbase.hregion.memstore.flush.size</name>
	<value>134217728</value>
	<source>hbase-default.xml</source>
</property>

  • MemStore的存活时间超过1小时(默认),触发Flush溢写(RegionServer级别)
<property>
	<name>hbase.regionserver.optionalcacheflushinterval</name>
	<value>3600000</value>
	<source>hbase-default.xml</source>
</property>
  • 当MemStore超过阀值的时候,就要flush到HDFS上生成一个StoreFile。因此随着不断写入,HFile的数量将会越来越多,根据前面所述,StoreFile数量过多会降低读性能
  • 为了避免对读性能的影响,需要对这些StoreFile进行compact操作,把多个HFile合并成一个HFile
  • compact操作需要对HBase的数据进行多次的重新读写,因此这个过程会产生大量的IO。可以看到compact操作的本质就是以IO操作换取后续的读性能的提高

4. Master的工作机制

Master启动(上线)步骤:

  • 1.从zookeeper上获取唯一一个代表active master的锁,用来阻止其它master成为master
  • 2.一般hbase集群中总是有一个master在提供服务,还有一个以上的‘master’在等待时机抢占它的位置。
  • 3.扫描zookeeper上的server父节点,获得当前可用的region server列表
  • 4.和每个region server通信,获得当前已分配的region和region server的对应关系
  • 5.扫描.META.region的集合,计算得到当前还未分配的region,将他们放入待分配region列表

Master下线:
在这里插入图片描述

5. Region的管理

region的分配:

  • 任何时刻,一个region只能分配给一个region server
  • Master记录了regionserver的具体分配情况
  • Master使用ZooKeeper来跟踪region server状态

region的分裂:

  • 当region中的数据逐渐变大之后,达到某一个阈值,会进行裂变
  • 一个region等分为两个region,并分配到不同的RegionServer
  • 原本的Region会下线,新Split出来的两个Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上
<-- Region最大文件大小为10G -->

	<property>
	<name>hbase.hregion.max.filesize</name>
	<value>10737418240</value>
	<final>false</final>
	<source>hbase-default.xml</source>
</property>

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值