整个HBase集群的访问入口,并维护cache来加快对HBase的访问
使用HBase RPC机制与HMaster和HRegionServer进行通信
与HMaster通信进行表的DDL操作
通过zookeeper下的meta表,获取region位置。与HRegionServer进行数据读写类操作
1). 在新版本中,Client 先访问 zookeeper,获取 hbase:meta 表位于哪个
Region Server。访问对应的 Region Server,获取 hbase:meta 表,根据读
请求的 namespace:table/rowkey,查询出目标数据位于哪个 Region Server
中的哪个 Region 中。并将该 table 的 region 信息以及 meta 表的位置信息
缓存在客户端的 meta cache,方便下次访问。与目标 Region Server 进行通
讯;
2). 在老版本中,Hmaster启动时候会将hbase系统表-ROOT-加载到zookeeper cluster,通过zookeeper
cluster可以获取当前系统表.META.的存储所对应的regionserver信息
HMaster、RegionServer容错
hbase regionserver向zookeeper注册,提供hbase regionserver状态信息
https://zhuanlan.zhihu.com/p/413300832
Zookeeper 提供了 HBase Master 的高可用实现,并保证同一时刻有且仅有一个主 Master 可用。
Zookeeper 保存了 Region 和 Region Server 的关联信息(提供寻址入口),并保存了集群的元数据(Schema/Table)。
Zookeeper 实时监控Region server的上线和下线信息,并实时通知Master。
1.监控 RegionServer,处理 RegionServer 故障转移
2.管理用户对table的增删改操作即DDL(data definition language)(create, delete, alter)
3.处理 region 的分配或转移到各个RegionServer
4.在空闲时间进行数据的负载均衡
5.通过 Zookeeper 发布自己的位置给客户端
1.负责存储 HBase 的实际数据,存放和管理本地HRegion,并负责切分正在运行过程中变的过大的region
2.刷新缓存到 HDFS
3.维护 Hlog
4.执行压缩
5.负责处理 Region 分片
HLog(WAL log):预写入日志,记录操作,类似于hdfs的edits
WAL意为write ahead log,用来做数据恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复
1.Write-Ahead logs
HBase 的修改记录,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内
存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有
更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead
logfile 的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个
日志文件重建。
2. HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是
HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,
同时还包括 sequence number和timestamp,timestamp是”写入时间”,sequence
number的起始值为0,或者是最近一次存入文件系统中sequence number。
HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的KeyValue。
Hbase 表的分片,HBase 表会根据 RowKey值被切分成不同的 region 存储在 RegionServer中,在一个 RegionServer 中可以有多个不同的 region。
# 每个regionServer大约100个regions的时候效果最佳:
1)hbase的一个特性MSLAB,它有助于防止堆内存的碎片化,减轻垃圾回收full gc
的问题,默认是开启的。但是每个MenStore需要2MB,如果region过多,就算不储存数据,也会占用很多内存。
2)如果region过多,MenStore也过多,就会触发regionServer的限制,导致flush,就会对用户请求产生较大的影响,可能阻塞该regionServer上的更新操作。
3)HMaster需要花费大量的时间来分配和移动Region,且过多的region会增加zookeeper的负担。
4)hbase读入数据进行处理的mapreduce程序,过多的region会产生很多的map任务数量,默认情况下有设计的region数量决定。
# region大小的影响:
hbase中的数据一开始会写入MemStore,超过配置之后,会flush到磁盘成为HStore文件,
当HStore的数量超过配置之后,会启动compaction,将他们合并为一个HStore。
当合并后的HStore大于max.filesize时,会触发风格动作,将它切分为两个
region。hbase.hregion.max.filesize不宜过大或过小,经过实战,生产高并
发运行下,最佳大小5-10GB!关闭某些重要场景的hbase表的major_compact!在
非高峰期的时候再去调用major_compact,这样可以减少split的同时,显著提供集群的性能,吞吐量、非常有用。
1)当hbase.hregion.max.filesize比较小时,触发split的机率更大,系统的整体访问服务会出现不稳定现象。
2当hbase.hregion.max.filesize比较大时,由于长期得不到split,因此同一
个region内发生多次compaction的机会增加了。这样会降低系统的性能、稳定性,因此平均吞吐量会受到一些影响而下降。
每一个region由一个或多个store组成,至少是一个store
HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列族。
内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL 中之后,RegsionServer 会在内存中存储键值对。
数据先存储在 MemStore 中,排好序后,当memStore的大小达到一个阈值(默认128MB)时,memStore会被flush到文 件(HFile),每次刷写都会形成一个新的 HFile。
memStore内存中的数据写到文件后就是StoreFile,这里是一种概念上的叫法。StoreFile底层是以HFile的格式保存,即数据保存在hdfs上
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。