连你也能看懂的大数据之Hadoop——Hbase,得之幸之

通过之前的介绍,我们了解了Hadoop框架下两个核心技术,我们发现这两个核心技术有一个共同的不足:操作数据延时性较高,不适合实时操作的场景。那么今天我们来看看Hadoop框架下可以实现实时读写访问的组件——Hbase。

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

工程师

什么是Hbase?

晓智

Hbase全称为Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

Hbase在Hadoop生态圈中的位置

通过之前的介绍我们了解到:MapReduce是Hadoop生态圈中的分布式计算框架,HDFS为Hadoop生态圈中的分布式文件存储的服务,那么Hbase在Hadoop框架中扮演着什么样的角色呢?简单来说,Hbase类似于传统的关系型数据库,是Hadoop框架中的结构化数据存储服务,是一种列式的分布式数据库。换言之:HDFS管理的是存放在多个硬盘上的数据文件,而Hbase管理的是类似于key—value映射的表。即便如此,Hbase的底层依旧依赖 HDFS 来作为其物理存储。

此外,Hbase的工作还需要zookeeper的协助,Zookeeper在此提供一些配置服务,维护元信息和命名空间等服务,Hbase在Hadoop生态圈中的位置如下图所示:

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

Hbase与传统关系数据库的区别

在传统的数据库RDBMS(Relational Database Management System)中,数据是按照行存储的,没有索引的查询将使用大量的I/O,建立索引和视图需要花费大量的时间和资源,面对查询需求,数据库必须大量膨胀才能满足性能要求。而在Hbase中,数据是按列存储的,查询时只访问所涉及的列,大量降低系统I/O,数据类型一致,可以高效压缩存储。下面我们来具体看看数据在两类数据库中排布方式的区别:

  • 数据在 RDBMS 中的排布示例

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

  • 数据在 HBase 中的排布(逻辑上)

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

从上面示例表中,我们可以看出,在 HBase 中有Column Family 的概念,简称为 CF。CF 一般用于将相关的列(Column)组合起来。上述例子中,“姓”和“名”组合成为info,组合的形式是类似于字典的key-value形式。在物理上 HBase 其实是按 CF 存储的,只是按照 Row-key 将相关 CF 中的列关联起来。物理上的数据排布大致可以如下表所示。

  • 数据在 HBase 中的排布

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

在了解了两种数据库在数据排布方式上的区别后,我们来看看它们在其他方面的区别,具体如下表所示:

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

通过对比Hbase和RDBMS的区别,我们可以发现Hbase对数据的存储方式和数据结构进行了修改和规整,让其更加善于去处理大数据的场景,但也因此导致Hbase有其对应的局限性。Hbase的设计目标并不是替代RDBMS,而是对RDBMS的一个重要补充。因此我们在使用的时候,应该按照具体应用场景来判断该使用哪种类型的数据库。

HBase的特点和局限

  • 特点:

1)表规模大:一个表可以有上亿行,上百万列。

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

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

  • 局限:

1)只能做简单的key-value查询,复杂的统计sql做不到。

2)只能在row-key 上做快速查询。


上一期我们了解了Hbase是一个高可靠性、高性能、面向列、可伸缩的分布式数据库,并且对比了它与传统关系数据库的区别。本期我们来看看Hbase 背后的原理,了解它是如何实现高效I/O的。

Hbase的存储结构

Hbase的存储结构基于Hadoop的HDFS存储,所以Hbase的存储具备HDFS的特性。Hbase的存储结构如下图所示,我们来一一解读图中的关键角色。

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

Client

Hbase的客户端Client使用远程过程调用(RPC)与HMaster和HRegionServer进行通信,如果接受到用户管理类请求,则Hbase Client与HMaster进行通信,如果接受到用户数据读写类请求,则Hbase Client与HRegionSever进行通信。

Zookeepe

Zookeeper保存了root表的地址以及HMaster的地址等元信息。HRegionServer也会将自己注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也保证了集群中总有一个Master在运行。

HMaster

HMaster和HRegionServer依然遵从简单的主从关系,其体系结构图如下所示:

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

HMaster服务器负责管理所有的HRegion服务器和Table表,其本身不存储数据。HMaster主要实现的功能包括:

  • 管理用户对Table的增删改查操作。
  • 管理HRegionServer的负载均衡,调整HRegion的分布。
  • 在Region 拆分以后,负责新Region的分配。
  • 当HRegionServer停机以后,负责Region的迁移。

HRegionServer

HRegionServer主要负责响应用户I/O需求,向HDFS文件系统中读写数据,是Hbase最核心的模块。原理如下图所示:

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

HRegionServer包含两大部分:HRegion部分和HLog部分,HRegion部分由很多个HRegion组成,每一个HRegion又由很多个Store组成,每一个Store存储的实际上是一个列族(ColumnFamily)下的数据。在此的ColumnFamily与上一期介绍的Table中的ColumnFamily对应,由此可以看出ColumnFamily是一个集中的存储单元,因此具有相同I/O特性的列应尽量设计在一个ColumnFamily中,这样最高效。

Store存储是HBase存储的核心,它由两部分组成:一部分是MemStore,一部分是StoreFile。用户写入的数据首先会放入MemStore,当MemStore写满了以后会将其变成一个StoreFile。由于MemStore运行在内存中,所以用户只要完成数据写入内存就可以立即返回,保证了Hbase I/O高性能。当StoreFile文件数量增长到一定的阈值时会触发合并操作,将多个StoreFile合并成一个StoreFile,合并的过程中会将冗余的数据进行删除或合并的操作。StoreFile在完成合并操作以后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后会触发拆分操作,同时把当前的StoreFile拆分成2个子文件,并分别分配到相应的HRegionServer上,这么做的目的是避免StoreFile文件过大导致单个Region压力较大,起到压力分担的效果。

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

HLog用来存储数据日志,其采用的是先写日志的方式,即数据在写入MemStore之前,会先写一份数据到HLog文件之中。HLog文件会定期滚动保存新的数据,删除已经存入StoreFile的数据。这么做的原因在于当HRegionServer出现意外终止时,MemStore仍在内存中运行,保存在其中的数据将会丢失。此时HMaster首先会处理遗留的HLog文件,将不同Region的Log数据进行拆分,分别放到相应的Region之下,再将失效的Region重新分配。领取这些Region的HRegionServer在Load Region的过程中,会发现有历史的HLog需要处理,因此会重新加载HLog中的数据到MemStore中,然后保存到StoreFile,以此完成数据恢复。

Hbase的存储格式

Hbase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括HFile和HLogFile两种文件格式。

HFile存储格式

HFile是一种二进制格式文件,用于存储Hbase里的Key-Value数据。实际上StoreFile就是对HFile做了轻量级包装整合,即StoreFile底层就是HFile。

HFile主要分为六个部分:

1) Data Block:保存表中的数据。

2) Meta Block:保存用户自定义的Key-Value键值对。

3) File Info:保存HFile的元信息。

4) Data Block Index:Data Block的索引,每条索引的key是被索引的Block的第一条记录的key。

5) Meta Block Index:Meta Block的索引。

6) Trailer:保存了每一段的偏移量。

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

其中,Data Block和Meta Block通常采用压缩方式存储,这样能大大减少磁盘I/O,但是会增加CPU压缩和解压缩的开销。

HLogFile存储格式

HLogFile的存储格式是WAL(Write Ahead Log),记录了数据的所有变更,一旦数据修改,就可以从Log中进行恢复。每个RegionServer维护一个HLog,这样不同Region的日志会混在一起,目的是不断的追加单个文件,同时写多个文件时可以减少磁盘寻址次数,提高I/O能力。但这样做也有缺陷,如果RegionServer下线,为了恢复其上的数据时,需要对RegionServer上的Log进行拆分,然后分发到其他Region上进行恢复。

HLogFile从物理意义上看是一个普通的Hadoop Sequence File。Sequence File 的Key是HLogKey对象,记录了写入数据的归属信息。HlogSequeceFile 的Value 是HBase的KeyValue对象,即对应HFile中的KeyValue。HLogFile的存储格式如下图所示:

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

这下对大数据之Hadoop-hbase有个了解了吧?想要更深入学习的话,小编这里有一套大数据从入门道精通的视频教程~~~

大家只需要转发此文,关注小编之后,私信小编“学习”就可以拿到手了~~~~~~~还有马老师的Java基础视频教程附赠~~~

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

连你也能看懂的大数据之Hadoop——Hbase,得之幸之

附赠

相关推荐