博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hbase 架构(未完待续)
阅读量:6923 次
发布时间:2019-06-27

本文共 3120 字,大约阅读时间需要 10 分钟。

架构一

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:

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读取数据流程?

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所有的数据文件都是存储到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。

 

原文出处:

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

你可能感兴趣的文章
JavaScript引擎的工作原理
查看>>
CentOS 安装声卡驱动
查看>>
SpringBoot集成Quartz
查看>>
commons-cli java 命令行的实现(类似linux)
查看>>
Maven使用deploy上传jar包到远程库
查看>>
Linux查看swap占用情况
查看>>
IOS开发网络第一天之01耗时操作
查看>>
notepad++设置网络代理
查看>>
linux服务器管理系统wdcp v2.5.7版本发布
查看>>
王爽《汇编语言》实验10
查看>>
java:均值哈希实现图像内容相似度比较(图像视频相似度算法)
查看>>
【js与jquery】jquery之放大镜插件源码分析
查看>>
php闭包
查看>>
android robotium FragmentActivity
查看>>
教你步步为营掌握自定义ViewGroup
查看>>
向 JasperReports Server 发布报表
查看>>
Maven Jetty 启动,修改html,jsp等文件无法保存
查看>>
获取在FORM表单里面的radio值并传向父页面(text)控件中
查看>>
oss 客户端查看私有bucket
查看>>
Canvas和Paint实例
查看>>