欢迎投稿

今日深度:

HBase工作原理,

HBase工作原理,


1. Region的定义与数据存储管理

2. 细化HBase内部存储

3. HBase内存管理和文件合并

主要角色总结:

Client
1 包含访问HBase的接口,client维护着一些cache来加快对HBase的访问,比如Regione的位置信息。

Zookeeper
1 保证任何时候,集群中只有一个master
2 存贮所有Region的寻址入口----root表在哪台服务器上。
3 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
4 存储HBase的schema,包括有哪些table,每个table有哪些column family

Master职责
1 为Region server分配Region
2 负责Region server的负载均衡
3 发现失效的Region server并重新分配其上的Region
4 HDFS上的垃圾文件回收
5 处理schema更新请求

Region Server职责
1 Region server维护Master分配给它的Region,处理对这些Region的IO请求
2 Region server负责切分在运行过程中变得过大的Region
可以看到,client访问HBase上数据的过程并不需要master参与(寻址访问zookeeper和Region server,数据读写访问Regione server),master仅仅维护者table和Region的元数据信息,负载很低。

基本存储的总结:

1 Table中的所有行都按照row key的字典序排列。

2 Table 在行的方向上分割为多个HRegion。

3 Region按大小分割的(默认10G),每个表一开始只有一个Region,随着数据不断插入表,Region不断增大,当增大到一个阀值的时候,HRegion就会等分会两个新的HRegion。当table中的行不断增多,就会有越来越多的HRegion。

4 HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的HRegion server上。但一个HRegion是不会拆分到多个server上的。

5 HRegion虽然是负载均衡的最小单元,但并不是物理存储的最小单元。事实上,HRegion由一个或者多个Store组成,每个store保存一个column family。每个Strore又由一个MemStore和0至多个StoreFile组成。

6 一个Region由多个store组成,每个store包含一个列族的所有数据;Store包括位于内存的MemStore和位于硬盘的storefile

​ 写操作先写入MemStore,当MemStore中的数据量达到某个阈值,HRegionserver启动flashcache进程写入storefile,每次写入形成单独一个storefile;当storefile大小超过一定阈值后,会把当前的Region分割成两个,并由Hmaster分配给相应的Region服务器,实现负载均衡

客户端检索数据时,先在MemStore找,找不到再找storefile。

4. HBase客户端搜索RegionServer

如下有2张表(table1为大表,table2为小表),假设要查询的数据是table2的RK15000行数据。Client并不知道存储该行数据的Region存放在哪个RegionServer中。系统是如何查找到该RegionServer的呢?

上面的执行过程中存在一个新的问题,.META表本身就是一张HBase表,要查询表中的数据需要知道存储该数据的RegionServer存放在哪里,为了解决这个问题,引入了Zookeeper,将所有RegionServer存储到Zookeeper中。

解决上面的问题后出现了一个新的问题,当table1表的内容变得特别大的情况下,那么记录该表的META表内容也跟着增大;随着META表内容变大,所需要的RegionServer(Region变大)也跟着变大。也就是查询一条数据,在Zookeeper中会有越来越多的RegionServer要逐一遍历。为了解决这个问题,系统引入了一张叫做-ROOT-的表。

示意图如下:

如果-ROOT-表太大了,要被分成多个Region怎么办?HBase认为-ROOT-表不会大到那个程度,因此-ROOT-只会有一个Region,这个Region的信息也是被存在HBase内部的。完整的步骤应该是这样的:

注意:

5. HBase读写过程

读请求过程:
1 客户端通过zookeeper以及root表和meta表找到目标数据所在的Regionserver
2 联系Regionserver查询目标数据
3 Regionserver定位到目标数据所在的Region,发出查询请求
4 Region先在MemStore中查找,命中则返回
5 如果在MemStore中找不到,则在storefile中扫描;如果内部有很多storefile,可以使用bloomfilter

写请求过程:
1 client向Region server提交写请求
2 Region server找到目标Region
3 Region检查数据是否与schema一致
4 如果客户端没有指定版本,则获取当前系统时间作为数据版本
5 将更新写入WAL log
6 将更新写入MemStore
7 判断MemStore的是否需要flush为Store文件。

www.htsjk.Com true http://www.htsjk.com/hbase/42494.html NewsArticle HBase工作原理, 1. Region的定义与数据存储管理 2. 细化HBase内部存储 3. HBase内存管理和文件合并 主要角色总结: Client 1 包含访问HBase的接口, client 维护着一些cache来加快对HBase的访问,比...
相关文章
    暂无相关文章
评论暂时关闭