HBase系统组成

数据库 Quarterback 35℃ 0评论

本文主要讨论这几个问题:

  1. HBase系统组成
  2. Master
  3. RegionServer
  4. 底层文件系统(Hadoop HDFS)
  5. Zookeeper
  6. ThriftServer
  7. RestServer
  8. 客户端驱动(Java API)

1. HBase系统组成

26881fcf-84dc-48da-9119-f9774c6c952e
  • HBase服务端主要包括如下几个组件:
    • Master
      • Master节点
    • RegionServer
      • HBase服务集群的Region服务器节点
    • 底层文件系统
      • 默认推荐是将HBase构建在Hadoop HDFS分布式文件系统之上
    • Zookeeper
      • 分布式协调组件
    • ThriftServer
      • 提供Thrift协议(跨语言通信协议)接口服务
    • RestServer
      • 提供HTTP协议Rest接口服务
    • 客户端驱动(Java API)
      • Java客户端驱动程序

2. Master

  • Master的主要实现类为org.apache.hadoop.hbase.master.HMaster,会启动一个HMaster进程,默认会监听16000端口(hbase.master.port)和web ui的16010hbase.master.info.port
  • HBase服务集群的主节点,可以启动多个HMaster,通过Zookeeper实现Master的选举机制,保证总有一个Master主节点提供服务,其他作为standby
  • Master服务主要负责metadata的变更和集群中regionserver的监控管理工作:
    • 元数据操作接口(HBase表的创建,删除,修改,启用,禁用,表信息查询等)
    • 在Region分裂后,负责新Region分配
    • Region的负载均衡,调整Region分布
    • 在RegionServer挂掉后,负责故障转移,负责RegionServer上Region的迁移
    • 内置httpserver,提供HBase Master UI访问界面
  • 由于Master节点不负责数据,因此其需要的内存和CPU资源不像RegionServer那么多,通常部署运行在hadoop集群的namenode节点上
  • 由于客户端处理数据时直接与RegionServer交互,并且HBase表的meta data不会常驻HMaster,会保存在”hbase:meta”表中,因此集群可以在没有master节点存在情况下客户端仍然能短期内(如果没有RegionServer宕机或者region分裂等)“正常”对表数据进行操作。
 

3. RegionServer

  • RegionServer的主要实现类为org.apache.hadoop.hbase.regionserver.HRegionServer,会启动一个HRegionServer进程,默认会监听hbase region server端口,16020(hbase.regionserver.port)和region server web ui端口,默认是16030(hbase.regionserver.info.port)
  • RegionServer会负责客户端的数据读写,在Hadoop集群中通常和DataNode部署在同一节点,这样可以实现数据本地性,提高读写效率
  • RegionServer主要负责Region的管理工作以及为客户端提供数据读写操作:
    • 定期向Master汇报RS的情况,包括RS内存使用状态、在线状态的Region等信息
    • 管理Region,执行Flush、Compaction、Open、Close、Load等操作
    • 管理预写日志(WAL)
    • 提供客户端的数据操作,执行数据插入、更新和删除操作,以及数据查询
    • Metrics:对外提供了衡量HBase内部服务状况的参数
    • 内置HttpServer,提供访问RS的界面

4. 底层文件系统(Hadoop HDFS)

  • HBase推荐生产环境使用Hadoop HDFS作为底层文件系统。但是HBase使用的文件系统是一个可插拔的架构,可以使用任何支持Hadoop接口的文件系统代替HDFS。
  • 通过HDFS的多副本机制实现了HBase的数据文件HFile的数据冗余备份,因此,当某个RegionServer崩溃后,不用担心数据丢失。
 

5. Zookeeper

  • HBase集群利用Zookeeper作为分布式协调服务来实现HMaster选举与主备切换、系统容错、RootRegion管理、Region状态管理和分布式SplitWAL任务管理等
  • Zookeeper中存储了hbase:meta表的位置信息
  • HBase集群可以使用其自身管理的Zookeeper,也可以配置独立部署的Zookeeper集群
 

6. ThriftServer

  • 因为HBase是Java语言编写的,其提供的Java客户端driver只能Java客户端调用。而Thrift是一个跨语言的通信框架,因此HBase提供了ThriftServer供其他语言通过Thrift协议调用HBase接口。
  • 当用户通过Thrift协议访问ThriftServer时,ThriftServer实际上也是用的Java Client API去访问的HBase.
  • Thrift接口有两个版本:Thrift和Thrift2,Thrift2是为了适应新的Java API而提出的,但由于Thrift2版本没有完全兼容Thrift版本,因此就保留了两个版本,Thrift2的接口设计的比Thrift接口更贴近现在的API。
    • org.apache.hadoop.hbase.thrift.ThriftServer
    • org.apache.hadoop.hbase.thrift2.ThriftServer
  • 目前HDP版本,ambari默认是没有集成对HBase ThriftServer管理的,需要手动进行启动:
    • 默认thrift server默认监听9090端口(hbase.regionserver.thrift.port),thrift server的web ui默认监听9095端口(hbase.thrift.info.port)
    • bin/hbase-daemon.sh start thrift –infoport 19991 -p 19990
    • bin/hbase-daemon.sh start thrift2 –infoport 19991 -p 19990

7. RestServer

  • 和Thrift接口一样,HTTP协议的rest接口也和语言不相关。
  • 接口服务主要实现类为org.apache.hadoop.hbase.rest.RestServer
  • bin/hbase-daemon.sh start rest -p <port>
 

8. 客户端驱动(Java API)

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-shaded-client</artifactId>
    <version>2.2.1</version>
</dependency>


/* 本文属于原创文章,转载请注明作者和出处 quarterback.cn,请勿用于任何商业用途 */




喜欢 (0)or分享 (0)
Quarterback.cn 打赏作者
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址