Hbase架构剖析

  HBase隶属于hadoop生态系统,它参考了谷歌的BigTable建模,实现的编程语言为 Java, 建立在hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它仅能通过主键(row key)和主键的range来检索数据,主要用来存储非结构化和半结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。Hbase数据库中的表一般有这样的特点:

大: 一个表可以有上亿行,上百万列

面向列:  面向列(族)的存储和权限控制,列(族)独立检索

稀疏: 对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏

目录:

系统架构

数据模型

RegionServer

nameSpace

HBase寻址

write

Compaction

splite

read

系统架构

HBase采用Master/Slave架构搭建集群,由HMaster节点、HRegionServer节点、ZooKeeper集群组成,而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NN、DN等,总体结构如下(注意:在hadoop(四): 本地 hbase 集群配置 Azure Blob Storage 介绍过,也可以将底层的存储配置为 Azure Blob Storage 或 Amazon Web Services),图A较清楚表达各组件之间的访问及内部实现逻辑,图B更直观表达hbase 与 hadoop hdfs 部署结构及 hadoop NN 和 HMaster 的 SPOF 解决方案

Hbase架构剖析

架构图A

Hbase架构剖析

 

 

 架构图B

Client的主要功能:

使用HBase的RPC机制与HMaster和HRegionServer进行通信

对于管理类操作,Client与HMaster进行RPC

对于数据读写类操作,Client与HRegionServer进行RPC

Zookeeper功能:

通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册

实时监控Region server的上线和下线信息,并实时通知给Master

存贮所有Region的寻址入口和HBase的schema和table元数据

Zookeeper的引入实现HMaster主从节点的failover

详细工作原理如下图:

Hbase架构剖析

 

在HMaster和HRegionServer连接到ZooKeeper后创建Ephemeral节点,并使用Heartbeat机制维持这个节点的存活状态,如果某个Ephemeral节点失效,则HMaster会收到通知,并做相应的处理

HMaster通过监听ZooKeeper中的Ephemeral节点(默认:/hbase/rs/*)来监控HRegionServer的加入和宕机

在第一个HMaster连接到ZooKeeper时会创建Ephemeral节点(默认:/hbasae/master)来表示Active的HMaster,其后加进来的HMaster则监听该Ephemeral节点,如果当前Active的HMaster宕机,则该节点消失,因而其他HMaster得到通知,而将自身转换成Active的HMaster,在变为Active的HMaster之前,它会创建在/hbase/back-masters/下创建自己的Ephemeral节点

 

HMaster功能:

管理HRegionServer,实现其负载均衡

管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上

监控集群中所有HRegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态)

处理schema更新请求 (创建、删除、修改Table的定义), 如下图:

Hbase架构剖析

 

 

 

HRegionServer功能:

Region server维护Master分配给它的region,处理对这些region的IO请求

Region server负责切分在运行过程中变得过大的region

小结:

client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低

HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化

数据模型:

Table: 与传统关系型数据库类似,HBase以表(Table)的方式组织数据,应用程序将数据存入HBase表中

Row: HBase表中的行通过 RowKey 进行唯一标识,不论是数字还是字符串,最终都会转换成字段数据进行存储;HBase表中的行是按RowKey字典顺序排列

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfssj.html