您当前的位置: 首页 >  hbase

梁云亮

暂无认证

  • 3浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

HBase架构

梁云亮 发布时间:2020-03-06 11:10:29 ,浏览量:3

Hbase架构图:

在这里插入图片描述

从图中可以看出Hbase是由Client、Zookeeper、HMaster、HRegionServer、HDFS等几个组件组成:

Client

Client是整个Hbase集群的访问入口,它维护了对应的cache(Block Cache)来加速Hbase的访问,比如cache的.META元数据的信息等。 Client使用Hbase RPC机制与HMaster和HRegionServer通信:

  • 与HMaster通信进行管理类的操作
  • 与HRegionServer通信进行行读写类的操作
Zookeeper

HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。

Zookeeper Quorum中除了存储ROOT表的地址和HMaster的地址外,还存储了HRegionServer的注册信息。HRegionServer把自己以Ephemeral的方式注册到Zookeeper中,这样HMaster就可以随时感知到各个HRegionServer的健康状态。

Zookeeper的具体工作如下:

  • Zoopkeeper可以保证任何时候集群中只有1个HMaster(HA)在运行。如果HMaster异常,会通过竞争机制产生新的HMaster提供服务
  • 实时监控RegionServer的上线和下线信息,并实时通知给HMaster。即,通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知HMaster RegionServer上下线的信息
  • Zoopkeeper中存储了所有HRegion的寻址入口。即,HBase是通过Zoopkeeper存储元数据的统一入口地址的
  • Zoopkeeper中存储了Hbase的schema和table的元数据以及其它信息:HMaster需要知道哪些HRegionServer是活的、可用的以及HRegionServer的位置信息,以便管理,所有这些信息都有Zookeeper提供

Hbase与Zookeeper的关系

  • Hbase元数据存储在Zookeeper中
  • 默认情况下,Hbase管理Zookeeper实例,比如启动或停止Zookeeper
  • Zookeeper通过选举机制解决Hbase单节点故障问题
  • HMaster与HRegionServer启动时会向Zookeeper注册
HMaster

HMaster没有单点问题。理论上HBase中可以启动多个HMaster,但是通过Zookeeper的Master Election机制会保证总有一个HMaster在运行。 HMaster在功能上主要负责Table和HRegion的管理工作。

HMaster的主要职责如下:

  • 维护整个集群的负载均衡
  • 维护集群的元数据信息
  • 管理用户对Table本身的增、删、改、查操作。
  • 管理HRegionServer的负载均衡,调整Region分布
  • 在Region Split后,负责新Region的分配
  • 在HRegionServer停机后,负责失效HRegionServer上的Regions的迁移工作
  • 为HRegionServer分配Region
  • 发现失效的Region,并将失效的Region分配到正常的HRegionServer上
  • 当HRegionSever失效的时候,协调对应Hlog的拆分

注意:HMaster失效仅会导致所有元数据无法被修改,表的数据读写还是可以正常进行。

HRegionServer

HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。 HRegionServer直接对接用户的读写请求,是真正的“干活”的节点。 在这里插入图片描述 HRegionServer内部管理了一系列HRegion对象。每个HRegion对应了Table中的一个 Region。

HRegion由多个HStore组成,每个HStore对应了Table中的一个列簇的存储。 注:每个列簇其实就是一个集中的存储单元,因此最好将具备共同IO特性的列放在一个列簇中,这样最高效。

HStore存储是HBase存储的核心,它由MemStore和StoreFiles两部分组成。 用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile)。当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除。

可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的。这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。

当StoreFiles Compact后,会逐步形成越来越大的StoreFile。当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上。 在这里插入图片描述

在分布式系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegionServer中都有一个HLog对象,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,HLog文件会定期滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。 当HRegionServer意外终止后,HMaster会通过Zookeeper感知到。此时,HMaster首先会处理HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

HRegionServer的功能概括如下:

  • 维护HRegion并往HDFS中写数据
  • 负责和底层HDFS的交互,存储数据到HDFS
  • 在HRegionServer停机后,负责失效HRegionServer上的Region的迁移
  • 管理master为其分配的Region
  • 处理来自客户端的读写请求
  • 当表的大小超过设置值的时候,负责Region的拆分
  • 负责Storefile的合并工作

注意:

  • Client访问hbase上数据时并不需要HMaster参与,数据的读写也只是访问HRegioneServer。HMaster仅仅维护着table和Region的元数据信息,负载很低。
  • HBase是通过DFS client把数据写到HDFS上的
  • 每一个HRegionServer有多个HRegion,每一个HRegion有多个Store,每一个Store对应一个列簇。
  • HFile是StoreFile的存储格式,它是一个二进制格式文件。StoreFile就是对HFile进行了封装(其实就是一个东西),然后进行数据的存储。
  • HStore由一个MemStore和多个StoreFile组成。
  • HLog记录数据的变更信息,用来做数据恢复。
HDFS

HDFS为Hbase提供最底层的数据存储服务,同时为HBase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:

  • 提供元数据和表数据的底层分布式存储服务
  • 数据多副本,高可靠和高可用性
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0448s