hbase详细架构图(Hbase扩容原理)
本文目录
Hbase扩容原理
Hbase是Hadoop的一个存储组件可以提供低延迟的读写操作,它一般构建在HDFS之上,可以处理海量的数据。Hbase有个很好的特性是可以自动分片,也就是意味着当表的数据量变得很大的时候,系统可以自动的分配这些数据。
Hbase的基本存储单位是Region,Region是表数据的子集,多个Region的数据集合可以组成一张完成的表数据。Region本质上存储的一些排好序的,连续的行数据。最初的时候一张表只有一个Region,当Region变得非常大的时候,Region就会从中间分裂成两个基本等大的Region。
在Hbase中,slave也被称作RegionServer,每个RegionServer负责管理一些Region,同时一个Region只能属于一个RegionServer。
一个RegionServer可以服务一个或多个Region,每个Region在Region Server启动的时候被分配。Master可以决定将一些Region从一个RegionServer中移动到令一个RegionServer里面,以便更好的负载均衡。当某个RegionServer故障的时候,Master也可以将它的Region分配给其他的RegionServer。
Region与RegionServer之间的映射关系存储在Zookeeper中的META表中,通过读取META表,你就可以知道那个Region可以负责处理你的rowkey操作,其实这也代表着在HBase读写操作的时候是不用经过Master节点的,你可以之间联系RegionServer。
如图,在客户端进行scan的时候,它可以之间联系多个RegionServer处理当前的操作。
Meta表是用来跟踪Region的,它包含服务器的名称,Region的名称,表名,还有Region的startkey。通过startkey的范围,客户端就可以定位到当前的key要去哪一个Region了。
客户端在请求过META表之后,一般会将表缓存起来,防止每次操作都去获取。在Region进行分裂的时候,客户端去RegionServer操作Region的时候回返回异常,然后客户端会重新获取最新的META表信息。
Hbase的Java客户端API有两个主要的接口:
通过上面介绍,可以知道HBase虽然是Master/Slave架构的,但是并不是每次操作都经过Master的,读写数据的时候HBase只需要直接联系RegionServer即可。这也是HBase可以“无限扩容”的原因。在吞吐量不够的时候,通过增加RegionServer节点,可以增加吞吐量。
HBASE-Procedure架构
Hbase Procedure是HBASE服务端负责事物处理的一个架构,写的非常棒。。。可以扒下来改一改自己用的那种。。。
实现事物,需要处理的问题很多,主要的三个如下
对于事物的异常处理,要实现回滚操作。
对于未知状态处理,需要实现幂等与重试,当然实现分布式事物还有很多别的方面,这里省略。
HBASE的Procedure就是依据以上背景实现。
Procedure代表上述的流程部分,多个流程的划分为如果要执行下一个流程,那么需要将这两个流程之间的状态存储下来,也是幂等执行的最小单位。
最主要的三个方法为
Procedure之间是有派生关系的,即一个Procedure会派生出一个子Procedure,父Procedure和子Procedure共同组成一个事物,最顶层的流程为Root Procedure
对于资源的锁定:
执行Procedure的线程池。
保存事物的执行过程,用来在事物出错的时候,依次回滚事务,是一个栈结构。
用来在执行Procedure前存储Procedure的信息,用以在程序死亡重启时恢复执行事物。
用于组织执行Procedure的优先级
对Procedure的执行线程逻辑实现