Hbase各组件功能、HMaster、HRegionServer、HRegion、Hbase和Zookeeper关系、HBase如何恢复宕机前数据 03
1. Hbase整体结构
2. Hbase文字层级结构详解
- client
- ZK
- HMaster
- HRegionServer
- HRegion–>一个table有多个HRegion,一个HRegion默认为10g
- HStore–>对应一个列族,一个HRegion有多个HStore
- MemStore(内存)–>Flush到StoreFile
- StoreFile(磁盘)
- HFile(默认128g)–>hdfs客户端,写入到hdfs中
- HStore–>对应一个列族,一个HRegion有多个HStore
- HLog(容错机制,副本机制,保证数据不丢失)
- HRegion–>一个table有多个HRegion,一个HRegion默认为10g
3. 详细讲解HBase结构
3.1 client
- client和hmaster, client和hregionServer之间使用rpc通信
- client和hmaster–>管理型操作
- client和hregionserver–>读写型操作
3.2 Zookeeper
- 保证多个hmaster启动情况下,只有一个hmaster运行。–>分布式锁功能
- 存储 **-root-**表的location,所有hregion的入口,hmaster地址。
-
监控hregionServer的状态,将hregionServer的上线和下线信息,实时通知给hmaster
- 存储hbase的schema
- 有哪些table,
- 每个表中有哪些column family
3.3 hmaster
hmaster需要与zookeeper保持通信状态,通过zookeeper知道hregionServer的位置及hregionServer的存活状态(zookeeper监控hregionServer的存活),管理集群。
- 为hregionServer分配region(默认为10G一个region)
- 负责hregionServer的负载均衡
- 发现失效的hregionServer,就重新分配到其他hregionServer的hregion中
- GFS上的垃圾文件回收
- 它会负责客户端创建表、删除表的请求。
3.4 hregionServer(Hbase最核心的模块)
- 维护hmaster分配给它的10G的hregion。
- 负责切分过大的hregion(StoreFile触发切分机制)。
- 它会接受到客户端的读写表的请求。
3.5 hregion
- 一个表最开始存储的时候,只有一个hregion
- 一个region中会有多个store,每个store用来存储一个列簇。如果只有一个column family,就只有一个store。
- region会随着插入的数据越来越多,会进行拆分。默认大小是10G一个。
3.6 HFile
- HFile是HBase中keyValue数据的存储格式,列名:列值
- HFile是Hadoop的二进制格式文件,storeFile就是对Hfile进行了封装,进行数据的存储。
3.7 HStore(HBase的存储核心,memStore和storeFile组成)
- client写入数据,会先连hmaster,hmaster通过zk中的**-root-和.meta**得知机器的分配状态。找一台空闲的,鲜活的,离得近的hregionServer。
- 如果是重新建表,并分配一块新的hregion和hlog给这个表。
- 如果是往表里面写数据,会通过zk告知hregionServer往哪里写。
- client从zk中找到hmaster告知的空闲的、鲜活的、离得近的hregionServer,开始写数据。
- 数据会先写入到hlog和memStore中
- memStore满了后,会flush到一个StoreFile。
- storeFile达到一定阀值(比如64M),触发compact,会合并成一个大的storeFile,同时进行版本合并和数据删除。
- 多个storeFile合并成一个storeFile,当这个storeFile达到一定阀值(比如256M),会触发split操作,切分为两个storeFile。
- split操作相当于把和region切分为两个hregion,旧的hregion下线,新的storeFile分配到这两个hregion中,hmaster又把这两个hregion分配到相应的hregionServer上(有了20G的两个hregion)
3.8 HLogs(副本机制,防止hbase宕机)
HBase如何恢复宕机前数据
- 每个hregionServer都有一个HLog。
- HLog是一个实现write ahead log的类,用户写入memStore的同时,也会写一份数据到HLog中,HLog文件定期会滚动出新,并删除旧的文件(已经持久化到storeFile中的数据)
- 当HregionServer宕机后,zookeeper会先监听到,告知hmaster。
- hmaster首先处理遗留的HLog文件,将不同hregion的HLog数据拆分,放到对应的HRegion的Hlog数据拆分,放到对应的hregion目录下。
- hmaster将失效的hregionServer里面的数据重新分配。
- 新hregionServer加载就hregion,发现hregion目录下有历史hlog需要处理,会复制HLog中的数据到自己的memStore中,memStore满了Flush到storeFiles。完成数据恢复。
如果喜欢本文章,请用小手点个赞~