HBase概述及原理
1、概述
HBase是由Apache基金会开发,建立在Hadoop文件系统之上的,一个开源的非关系型分布式的面向列的数据库(NoSQL),为 Hadoop 提供类似于BigTable(google公司开发) 规模的服务,旨在提供对大量结构化数据的快速随机访问。
通过HBase,可以将数据存储到hdfs中,并可以对稀疏文件(sparse file)提供极高的容错率,适合实时数据处理及大量数据随机写入/读取。
HBase中的表是按照行进行排序的,一个表有多个列族,每个列族可以有任意数量的列,后续列值连续存储在磁盘上。表格的每个单元格值都有一个时间戳,简而言之,就是:
表是行的集合。
行是列族的集合。
列族是列的集合。
列是键值对的集合。
HBase表结构示例:
HBase特点如下:
实时速度:对存储的所有数据执行快速、随机的读写操作。
线性扩展:HBase 专为大规模可扩展性而设计,因此可以随着业务的线性扩展,在单个平台中存储无限量的数据。
灵活性:HBase可以 存储任何类型的数据——结构化、半结构化、非结构化, 并通过 Impala 和 Apache Solr 等在内的框架访问。
可靠性:可以将数据生成多个副本,以防止数据丢失。
2、版本
目前最新的版本是:HBase-2.4.9,发行于2021年12月24日,其特点如下:
支持的java版本为java8以上,hadoop版本至少为2.x
关于zookeeper的配置,不在从zoo.cfg中读取
去掉了之前版本的“分布式日志重播”功能
“主托管区域”功能已不受支持
使用slf4j作为其日志记录前端,log4j.properties *需要刷新
3、应用场景
数据量规模庞大:单表数据量超过千万或者十亿百亿的时候,并且伴有较高并发,这种情况下,HBase对于数据处理十分有效。
要求实时点查询:HBase是一个Key-Value数据库,默认对Rowkey即行键做了索引优化,即使数据量非常庞大,查询效率也会很高。
不需要关联的场景:由于Hbase是NoSQL型数据库,因而不支持表与表的关联查询。
数据分析需求少:HBase不擅长于进行复杂的数据分析。
HBase的典型应用场景有:搜索引擎、网站捕捉增量数据、监控数据存储、用户交互数据存储、在线广告与点击流
4、架构及组成
HBase集群采用master/slave的架构,架构核心由HMaster、HRegionSever、HRegion、zookeeper等组成,底层是基于HDFS来存储数据。
下面分别介绍一下这些组件:
HMaster
HMaster是HBase集群中的主服务器,负责监控集群中的HRegion,是所有元数据更改的接口。通常运行在 HDFS 的 NameNode上,通过 ZooKeeper 来避免单点故障,在集群中可以启动多个 HMaster,但同时只有一个 HMaster 处于 Active 状态,其他的 HMaster 处于热备份状态。
其作用是:
(1)为HRegionServer分配HRegion;
(2)负责HRegionServer的负载均衡;
(3)重新分配失效的HRegionServer;
(4)回收HDFS上的垃圾文件;
(5)处理schema更新请求
HRegionServer
HRegionServer是hbase中真正的工作节点,主要负责响应客户端的I/O请求,向HDFS文件系统读写数据,以及Region的数据文件的合并和拆分等,是Hbase中最核心的模块
其作用是:
(1)管理master为其分配的Region,每个HRegion一般管理1000个Region;
(2)处理来自客户端的读写请求;
(3)与底层hdfs的交互,存储数据到hdfs;
(4)将大的Region进行拆分;
(5)合并Storefile的工作
HRegion
HBase在每张表的行的方向上分割为多个HRegion,是HBase中分布式存储和负载均衡的最小单元,不同的HRegion可以分别在不同的HRegionServer上。
HRegion按大小分割,每个表一般只有一个HRegion。Region被分配给哪个Region Server是完全动态的,所以需要机制来定位Region具体在哪个region server。
随着数据的插入,HRegion也随之增大,当HRegion的某个列簇达到一个阀值(默认256M)时就会分成两个新的HRegion。
Zookeeper
Zookeeper是一个分布式的,开源的分布式应用程序程序协调服务,是Hadoop和HBase的重要组件,为分布式应用提供一致性服务:包括配置维护、分布式同步、组服务等。
Zookeeper在HBase中的作用有:
(1)实现集群中master的高可用;
(2)保证集群中只有一个master在运行;
(3)监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息;
(4)存储元数据的统一入口地址。
5、HBase运行机制
每个 Region Server 都会创建一个 ephemeral 节点。HMaster 会监控这些节点来发现可用的 Region Servers,以及监控这些节点是否出现故障。
众多的HMaster 会竞争创建 ephemeral 节点,而 Zookeeper 决定谁是第一个在线的 HMaster,保证线上只有一个 HMaster。
Active HMaster 负责监听 Region Servers 下线的消息,然后会恢复故障的 region server 以及它所负责的 region 数据。
Inactive HMaster负责监听active HMaster 下线的消息,然后竞争上线变成 active HMaster。
如果有一个 Region Server 或者 HMaster 出现故障或各种原因导致发送心跳失败,它们与 Zookeeper 的 session 就会过期,这个 ephemeral 节点就会被删除下线,并将这个消息发送给监听者。
第一次读写操作时:
客户端从zookeeper那里获取具体是哪一台Region Server 负责管理 Meta table(包含了集群中所有 regions 的位置信息,保存在zookeeper中)
客户端查询哪台管理Meta table 的 Region Server,进而获知哪一台Region Server 负责管理本次数据请求所需要的 rowkey。
客户端将查询到的信息以及Meta table 的位置信息本身缓存起来。
客户端去访问那台Region Server ,读取或写入数据。
后续发生读写请求时,客户端直接从缓存中获取Meta table 的位置信息以及以及之前访问过的 rowkey 的位置信息。