1.2 hbase 架构
目录表 hbase:meta
目录表 hbase:meta 作为 HBase 表存在,并从 hbase shell 的 list(类似 show tables)命令中过滤掉,但实际上是一个表,就像任何其他表一样。
hbase:meta 表(以前称为.META.),保有系统中所有 region 的列表。hbase:meta位置信息存储在 zookeeper 中。hbase:meta 表是所有查询的入口
表结构如下:
key:
region 的 key,结构为:[table],[region start key,end key],[region id]
values:
info:regioninfo(当前 region 序列化的 HRegionInfo 实例)
info:server(包含当前 region 的 RegionServer 的 server:port)
info:serverstartcode(包含当前 region 的 RegionServer 进程的开始时间)
当表正在拆分时,将创建另外两列,称为 info:splitA 和 info:splitB。 这些列代表两个子 region。 这些列的值也是序列化的 HRegionInfo 实例。区域分割后,将删除此行。
a,,endkey
a,startkey,endkey
a,startkey,
空键用于表示表开始和表结束。具有空开始键的 region 是表中的第一个 region。如果某个 region 同时具有空开始和空结束键,则它是表中唯一的 region。
1.2.1 Client
hbase:meta tablea,,100,node2
hbase:meta tablea,101-200,node3
hbase:meta tablea,201-300,node5
hbase:meta tablea,301-400,node237
hbase:meta tablea,401-500,node24
hbase:meta tablea,501,,node896
Client->zookeeper(hbase:meta)->root region ( tablea,node3 tableb,node4 )->meta region-> regionserver(数据)
包含访问 HBase 的接口并维护 cache 来加快对 HBase 的访问。HBase 客户端查找关注的行范围所在的 regionserver。它通过查询 hbase:meta 表来完成此操作。在找到所需的 region 之后,客户端与提供该 region 的 RegionServer 通信,而不是通过 Master,并发出读取或写入请求。此信息缓存在客户端中,以便后续请求无需经过查找过程。如果Master 的负载均衡器重新平衡或者由于 regionserver 宕机,都会重新指定该 region 的regionserver。客户端将重新查询目录表以确定用户 region 的新位置。
通过 Admin 进行管理功能的实现。
1.2.2 Zookeeper
1. 保证任何时候,集群中只有一个活跃 master
2. 存贮所有 Region 的寻址入口。 root region 的地址 hbase:meta 表的位置
3. 实时监控 Region server 的上线和下线信息。并实时通知 Master
4. 存储 HBase 的 schema 和 table 元数据
1.2.3 Master
1. 为 Region server 分配 region
2. 负责 Region server 的负载均衡
3. 发现失效的 Region server 并重新分配其上的 region
4. 管理用户对 table 的增删改操作 不是数据的增删改(DML) DDL理
概括:管理 region 的分配 和 管理对表的操作
1.2.4 RegionServer
1. Region server 维护 region,处理对这些 region 的 IO 请求
2. Region server 负责切分在运行过程中变得过大的 region
1.2.5 Region
1. HBase 自动把表水平划分成多个区域(region),每个 region 会保存一个表里面某段连续的数据 (每条记录都有一个行键,按照行键字典序排列)
2. 每个表一开始只有一个 region,随着数据不断插入表,region 不断增大,当增大到一个阈值的时候,region 就会等分会两个新的 region(裂变)
3. 当 table 中的行不断增多,就会有越来越多的 region。这样一张完整的表被保存在多个 Regionserver 上。
4. 一个 region 由多个 store 组成,一个 store 对应一个 CF(列族)
5. HRegion 是 HBase 中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion 可以分布在不同的 HRegion server 上。HRegion 由一个或者多个 Store
组成,每个 store 保存一个 columns family。每个 Store 又由一个 memStore 和0 至多个 StoreFile 组成。如图:StoreFile 以 HFile 格式保存在 HDFS 上。
1.2.6 Memstore 与 storefile
1. store 包括位于内存中的 memstore 和位于磁盘的 storefile。
2. 写操作先写入 memstore,当 memstore 中的数据达到某个阈值,hregionserver 会启动 flashcache 进程写入 storefile,每次写入形成单独的一个 storefile。
3. 当 storefile 文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的
storefile
4. 当一个 region 所有 storefile 的大小和数量超过一定阈值后,会把当前的 region 分割为两个,并由 hmaster 分配到相应的 regionserver 服务器,实现负载均衡
5. 客户端检索数据,先查找 memstore,再 blockcache(查询缓存),找不到再找 storefile