一、Region
- 由于Hbase运行在HDFS上,HDFS又是分布式的有很多的节点,一大个Hbase的表格一个节点是存不下的,所以Hbase的表格将会以行进行拆分后存放到各个节点中,拆分的部分就叫做Region(区域).
- Region就是一定范围内存储在一起的行,默认大小问256MB,可以再hbase-site.xml文件中进行配置,最大为4GB。
二、 Region Server
2.1.1 概念
- 每一个从节点有一个Region Server,一个Region Server可以管理多个Region,
- 一个Region只由一个Region Server管理。 Region Server 用于处理来自客户端的读取,写入,更新和删除请求。
- 遵循Region的设定值来确定Region的大小,默认256MB,最大4GB
2.1.2 存放示例图
Hbase表格的行将拆分为Region放入各个Region Server中
2.1.3 Region Server 服务机制
- 一个Region Server可以管理多个Region, 一个Region只由一个Region Server管理。
- Hfile 实际存储文件,表格被拆分的具体数据存放在Hfile文件中,Hfile存放在磁盘里。
- MemStore 写入缓存,用于存储尚未写入磁盘的新数据。一个区域中的每个列族都有一个MemStore。减少磁盘浪费
- Block Cache 读取缓存,加快读写响应时间,减少延迟
- WAL 预写日志,防止Region Server崩溃时导致数据丢失
读取数据的整体过程:用户向Region Server发出请求,Region Server 去 BlockCache里查看最近频繁查看的数据有没有用户需要的,如果没有再去Hfile里查询,Region Server 返回用户响应,用户拿到查询数据。(因为去Hfile所在磁盘里查询需要花费不少时间,查询BlockCache时间少,所以BlockCache大大减少了延迟。)
写入数据的整体过程:用户向Region Server发出请求,Region Server响应, 先安排数据存入Memstore,并备份日志到WAL,当Memstore数据量到一定数量后将创建新的HFile,然后将数据转移至Hfile写入磁盘。写入完毕(如果不用Memstore,直接写HFile将浪费磁盘空间并且无法更新,如果没有WAL,在数据写入Memstore时如果Region Server崩溃,则这部分写入缓存数据将丢失)。
三、 HMaster
- HMaster管理Region Server
- HMaster负责创建和删除表格
- HMaster负责给RegionServer分配Region
- HMaster负责协调管理RegionServer
四、 Zookeeper
- HBase使用ZooKeeper作为分布式协调服务来维护集群中的RegionServer状态。
- 与RegionServer建立客户端通信。
- Zookeeper维护RegionServer是否处于活动状态并且可用,并提供RegionServer故障通知。
- Zookeeper可以帮助我们跟踪HBase所在的所有RegionServer。
- HMaster通过实际联系Zookeeper来获取RegionServer的详细信息。
五、 Hbase特征
- 一致性
1)每个值只出现在一个REGION
2)同一时间一个Region只分配给一个Region服务器 - 原子读写
1)原子性操作是指:如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行 - 分片
1)分区(partition),在MongoDB,Elasticsearch中被称为分片(shard),在HBase中称之为区域(Region),Bigtable中则是表块(tablet),Cassandra中是虚节点(vnode).但是分区(partition)是约定俗成的叫法。 - 高可用性
1) 在HBase中Hmaster负责监控RegionServer的生命周期,均衡RegionServer的负载,如果Hmaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以HBase支持对Hmaster的高可用配置。
2)如果HMaster挂掉的话:
i)不能建表修改表了,但是可以在已经存在的表增删改查数据,因为这些操作是RegionServer做的.
Region分配也是由HMaster来处理的.如果HMaster挂掉的话,那么Region分配也是无法完成的.
ii)要想HMaster高可用的话,你需要启动多个HMaster进程.如果有一个HMaster挂掉的话,其它的HMaster可以顶上.
5. 实时处理
1)实时查询,可以认为是从内存中查询,一般响应时间在1秒内。HBase的机制是数据先写入到内存中,当数据量达到一定的量(如128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。