- 1. 架构图
- 2. 各组件功能作用
- 1.Client
- 2. zookeeper
- 3. HMaster
- 4. RegionServer
- 5. Hlog
- 6. Region
- 7. Store
- 8. MemStore
- 9. StoreFile
- 10. HFile
-
整个Hbase集群的访问入口,并维护cache来加快对Hbase的访问
-
使用Hbase RPC机制与HMaster和HRegionServer进行通信
-
与HMaster通信进行表的DDL *** 作
-
通过zookeeper下的meta表,获取region位置。与HRegionServer进行数据读写类 *** 作
- 存储hbase表元数据
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 发布自己的位置给客户端
4. RegionServer1.负责存储 Hbase 的实际数据,存放和管理本地HRegion,并负责切分正在运行过程中变的过大的region
2.刷新缓存到 HDFS
3.维护 Hlog
4.执行压缩
5.负责处理 Region 分片
5. HlogHLog(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。6. Region
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的机会增加了。这样会降低系统的性能、稳定性,因此平均吞吐量会受到一些影响而下降。7. Store
每一个region由一个或多个store组成,至少是一个store
HFile 存储在 Store 中,一个 Store 对应 Hbase 表中的一个列族。
8. MemStore内存存储,位于内存中,用来保存当前的数据 *** 作,所以当数据保存在WAL 中之后,RegsionServer 会在内存中存储键值对。
数据先存储在 MemStore 中,排好序后,当memStore的大小达到一个阈值(默认128MB)时,memStore会被flush到文 件(HFile),每次刷写都会形成一个新的 HFile。
9. StoreFilememStore内存中的数据写到文件后就是StoreFile,这里是一种概念上的叫法。StoreFile底层是以HFile的格式保存,即数据保存在hdfs上
10. HFile这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)