Hbase 架构(未完待续)

 2023-09-13 阅读 18 评论 0

摘要:架构一 组件说明: hbase底层数据结构?1,Client: 是Hbase的入口,增删改查都是从这里开始,对外提供一系列API跟Zookeeper交互的目的是为了获取Region信息(老版本的ROOT—Meta 新版本里只有Meta),获得到了这个信息以后(会缓存起来&#x

架构一

Hbase系统架构及数据结构

组件说明:

hbase底层数据结构?1,Client:

  • 是Hbase的入口,增删改查都是从这里开始,对外提供一系列API
  • 跟Zookeeper交互的目的是为了获取Region信息(老版本的ROOT—Meta 新版本里只有Meta),获得到了这个信息以后(会缓存起来,避免频繁跑到zookeeper来获取这些信息),就直接奔向Region Server,进行数据的增删改查。
  • Client 是使用HBase RPC机制与HMaster 和HRegionServer 进行通信。
  • Client 与 HMaster 之间只会进行管理类的操作。(架构图里面没有Client到HMater的连线,并不意味着他俩没有互动,在需要对数据表操作(数据表的新建 删除 修改)的时候Client就需要跟HMaster交互。)
  • Client 与 HRegionServer会进行数据读写类操作。
  • Client 对数据增删改查的实施目的地就是Region Server上面的Region。

2,Zookeeper:

  • 避免HMaster单节点故障(HA,领导选举机制,保证系统里面有一台可用的Master)
  • 管理HRegionServer和HMaster的注册信息
  • 存贮Root(老版本)以及Meta的信息(Root中记录的是Meta的信息,Meta中记录的是Region的信息)

3,HMaster:

  • 管理用户对表的增删改查操作,注意:重点是 表,而不是表中的数据。
  • 管理HRegionServer的负载均衡,以及调整Region分布。
  • Region Split以后(Region存储量达到一定的阈值),负责新Region分布。
  • HRegionServer停机以后,负责失效HRegionServer上的Region的迁移。(还有疑问,HRegionServer都挂了,HBase从哪里知道这台Server上的Region信息?从目前的认知,暂时理解为Zookeeper,待验证)

4,HRegionServer:

hbase环境搭建?2012060400572691.jpg

  • 核心模块,主要负责相应用户I/O请求,直接操作HDSF文件系统中的数据。
  • HRegionServer管理的是一系列的HRegion对象,每个Region则对应的是Table中的一部分数据。
  • HRegion 是由多个Store组成。
  • 每个Store对应Table里面的一个Column Family存储。(需要在后面的实践中进一步验证)。
  • Column Family 就是一个集中的存储单元,将具有相同I/O特性的Column放在一个Column Family里面会更高效。

 

HStore:

2012060400574793.gif

  • 存储核心,组成部分为MenStore和StoreFile
  • Client写入---》存储MemStore,达到阈值---》Flush成一个StoreFile,当StoreFile数量达到一定的阈值以后 ---》触发合并(Compact),使多个StoreFile合并成一个大的StoreFile,同时会进行版本合并以及数据删除 ---》当StoreFile,越来越大到超过一定的阈值以后 --》触发分割Split操作,把当前Region分割成2个Region,原先的Region会下线,新出来的两个Region会被HMaster重新分配到相应的HRegionServer上。(HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能。)
  • Client读取数据流程?

hbase 时序数据库。Hlog:

目的:在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的数据会消失,引入Hlog就是为了避免这种情况。

机制:每个HRegionServer中都会有一个HLOG对象,Hlog是一个 Write Ahead Log的类(有待进一步验证),每次用户(Client)写入数据到MemStore中的同时,也会写一份数据到Hlog,Hlog会定期回滚出新,并且会删除旧的文件(已持久化到StoreFile中的数据)。

当HRegionServer意外终止以后,HMaster会通过Zookeeper感知到,HMaster会先处理遗留下来的Hlog,将不同Region的log数据拆分,分配到相应Region目录下,然后在将失效的Region重新分配,领取到这些Region的HRegionServer在Load Region 的过程中,会发现有历史的HLOG需要处理,因此会根据HLOG中的数据重新导入到MemStore中,然后flush到Storefile中,完成数据恢复。

hbase架构?HBase存储格式:(待进一步验证)

HBase所有的数据文件都是存储到HDFS文件系统上,格式主要有两种:

  • HFile (传统Hadoop的Key Value格式,二进制格式文件)
  • HLog HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File。

 

HFile:

2012060400581450.jpg

  • HFile文件不定长,长度固定的块只有两个:Trailer和FileInfo
  • Trailer中指针指向其他数据块的起始点
  • File Info中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等
  • Data Index和Meta Index块记录了每个Data块和Meta块的起始点
  • Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制
  • 每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询
  • 每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏

HFile里面的每个KeyValue对就是一个简单的byte数组。这个byte数组里面包含了很多项,并且有固定的结构

2012060400583891.jpg

  • KeyLength和ValueLength:两个固定的长度,分别代表Key和Value的长度
  • Key部分:Row Length是固定长度的数值,表示RowKey的长度,Row 就是RowKey
  • Column Family Length是固定长度的数值,表示Family的长度
  • 接着就是Column Family,再接着是Qualifier,然后是两个固定长度的数值,表示Time Stamp和Key Type(Put/Delete)
  • Value部分没有这么复杂的结构,就是纯粹的二进制数据

Hlog File:

2012060400590244.jpg

HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number和timestamp,timestamp是“写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。
HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的KeyValue。

 

原文出处:http://www.cnblogs.com/shitouer/archive/2012/06/04/2533518.html

转载于:https://www.cnblogs.com/onionch/p/5459975.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/51736.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息