Hadoop之HBase原理
1. HBase的写操作步骤
1. 客户端执行put操作,HBase先将数据写入WAL文件,WAL文件是顺序写入的,所有新写入的日志被写入到WAL文件的末尾
2. WAL文件写入完成后,HBase将数据写入MemStore,当MemStore出现故障,可以根据WAL文件恢复
3. 当MemStore中的数据满了以后,HBase会执行flush的操作,将memstore写入到HFile
2. HBase的读过程与META表
1. meta表
1. 作用与位置
保存了用户表的Region信息
meta表的信息保存在zookeeper中
2. 查看meta表
表结构 describe 'hbase:meta'
表内容 scan 'hbase:meta'
2. HBase读取数据的过程
1. 客户端从zookeeper获取meta表的region信息
2. 客户端从对应的RegionServer读取meta表的数据,获取用户表的region信息
3. 客户端从对应的RegionServer读取用户表的数据,先从block cache,没有就读取HFile
3. HBase的读合并与读放大
1. 读合并
HBase读取数据会从不同的位置读取。
1. 从Block Cache读缓存中读取所需的数据
2. 从MemStore写缓存中读取数据
3. 如果上面都没有,就从HFile中读取数据。
上面的过程就叫做读合并
2. 读放大
一个MemStore对应的数据可能存储于多个不同的HFile中,因此HBase读操作中,可能需要读取多个HFile来获取想要的数据,这个过程就叫读放大,会影响HBase的性能
4. Region的分裂与读操作的负载均衡
因为单个region大小有限,随着数据的增多,一个region会进行分裂,然后分布到不同的region server上
5. HBase的异常恢复
当regionserver异常终止,zookeeper通过其监听机制感知这一事件,并通知HMaster;HMaster会将region的WAL日志拆分,将失效的region重新分配到新的region server上,在新的region server执行wal的重做,将数据写到memstore,将数据刷到HFile,完全数据的恢复。