《HBase企业应用开发实战》—— 1.2 HBase是什么

简介:

本节书摘来自华章出版社《HBase企业应用开发实战》一 书中的第1章,第1.2节,作者:马延辉 孟鑫 李立松 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.2 HBase是什么

HBase(Hadoop Database)是一个高可靠、高性能、面向列、可伸缩的分布式数据库,利用HBase技术可在廉价PC上搭建起大规模结构化存储集群。HBase参考Google的BigTable建模,使用类似GFS的HDFS作为底层文件存储系统,在其上可以运行MapReduce批量处理数据,使用ZooKeeper作为协同服务组件。
HBase的整个项目使用Java语言实现,它是Apache基金会的Hadoop项目的一部分,既是模仿Google BigTable的开源产品,同时又是Hadoop的衍生产品。而Hadoop作为批量离线计算系统已经得到了业界的普遍认可,并经过了工业上的验证,所以HBase具备“站在巨人肩膀之上”的优势,其发展势头非常迅猛。
HBase还是一种非关系型数据库,即NoSQL数据库。在Eric Brewer的CAP理论中,HBase属于CP类型的系统,其NoSQL的特性非常明显,这些特性也决定了其独特的应用场景。接下来的内容将详细讲解HBase的发展历史、发行版本和特性。

1.2.1 HBase的发展历史

Apache HBase最初是Powerset公司为了处理自然语言搜索产生的海量数据而开展的项目,由Chad Walters和Jim Kellerman两人发起,经过两年的发展之后被Apache基金会收录为顶级项目,同时成为非常活跃、影响重大的项目。
2006年11月,Google开放了论文“Bigtable:A Distributed Storage System for Structured Data”,该论文就是HBase的原型。2007年2月,倡导者提出作为Hadoop的模块的HBase原型,该原型包含HBase的基本介绍、表设计、行键设计和底层数据存储结构设计等内容。
经过一段时间的酝酿和开发工作,在2007年10月第一个可用的、简单的HBase版本发布,该版本只实现了最基本的模块和功能,因为只是初始开发阶段,此时的HBase版本发展很不完善。2008年1月,Hadoop升级为顶级项目,HBase作为Hadoop的一个子项目存在,HBase的活跃度非常高,在短短不到2年的时间经历了N多个版本的发布,并且其中包含了版本号的大“跳跃”。下面是一些版本发布的信息:
hbase-0.18.0于2008年9月21日发布
hbase-0.20.6于2010年7月10日发布
hbase-0.89.20100621于2010年6月25日发布
其中,从hbase-0.20.6到hbase-0.89.20100621版本,经历了版本的大“跳跃”。在2009年秋季发布0.20系列版本后,HBase经历了发展历史上的一次版本大变动,在此之前的版本都追随Hadoop的主版本,例如,hbase 0.X.版本都会伴随着Hadoop 0.X.版本,之所以出现版本跳跃,官方给出的解释有两点。
Hadoop的版本更新已经放缓,而HBase相比Hadoop开发来讲更加活跃,发布版本更加频繁,并且Hadoop已经有多个分支,HBase也需要兼容多个分支,所以不再需要与Hadoop的版本更新步伐保持一致。
从HBase的功能实现上来讲,已经基本实现BigTable论文中实现的功能,也就是HBase的实现已经接近“1.0”,应该赋予一个更接近“1.0”的版本。
“跳跃”之后的版本发布比较规律,先后经历了0.90.、0.92.、0.94.、0.96.、0.98.五个大的版本,现在稳定版本是0.94.

1.2.2 HBase的发行版本

本节主要介绍现有HBase的版本知识,从0.90.0之后,HBase的版本更新是非常有规律的,可以从0.90.0、0.91.0、0.92.0、0.93.0、0.94.0、0.95.0、0.96.0、0.97.0、0.98.0这样的版本变化中发现一些规律。
这些版本都是大版本,其中偶数版本是稳定发布版,而奇数版本都是开发版,基本不对外发布,但是可以在官方JIRA的项目管理系统中找到这些奇数版本对应的开发信息,并且可以在SVN上找到相关的最新开发代码。所以,偶数发布版本属于稳定版本,奇数开发版本属于不稳定版本,一般不建议用户在生产环境中使用开发版本,这些也是大版本的发布规律。
小版本一般基于当前大版本的问题进行修正,一般表示小版本的数字在1~100之间,例如:0.94.1、0.94.2、0.94.3、0.94.4。这些小版本都是基于0.94大版本的,截止到本书撰写时,最新版本是0.94.18。小版本都是从小到大依次递增,不存在版本跳跃的情况。对于小版本而言,原则上数值越大越稳定,因为小版本都是基于某一个大版本的,在小版本中并不会增加新特征,而是修正一些代码的漏洞和问题。
截止到本书完稿时,HBase官方给出的最新版本信息如下面的代码所示。从中可以看出,发布版本存在0.94、0.96、0.98三个大版本。其中stable文件夹包含了最新的稳定发布版本;to_remove表示已经移除的版本;HEADER.html文件用于对代码发行版进行说明,即下面代码中的前半部分,从“HBase Releases...”开始,一直到“'fresh'.”结束的解释说明。每部分后面都有对应的发布时间,可以通过该时间判断版本发布的间隔和项目的活跃程度。

HBase Releases
Please make sure you're downloading from a nearby mirror site, not from www.apache.org.
We suggest downloading the current stable release.
The 0.96.x series supercedes 0.94.x. We are leaving the 'stable' pointer on the 
    latest 0.94.x for now while 0.96 is still 'fresh'.

File Name File Size Date
hbase-0.94.17/    -    26-Feb-2014 01:31
hbase-0.94.18/    -    24-Mar-2014 19:10
hbase-0.96.2/    -    03-Apr-2014 23:18
hbase-0.98.0/    -    07-Feb-2014 01:26
stable/    -    24-Mar-2014 19:10
to_remove/    -    07-Apr-2013 20:38
HEADER.html 429    19-Oct-2013 15:49

stable文件夹中存放的是最新的稳定发布版本,从下面的代码中可以看到最新的稳定版本信息,其中发布版本包含文件名字、文件大小和发布日期等参数。在下面两个版本中,带有security后缀的版本可以使用安全认证和权限控制,基于Kerberos协议结构;另外一个版本是常规版本,一般搭建不需要用户权限控制的集群可以使用这个版本,权限控制部分可以交由中间业务逻辑层控制。

File Name File Size Date
hbase-0.94.18-security.tar.gz 59108691 24-Mar-2014 19:10
hbase-0.94.18.tar.gz 58691770 24-Mar-2014 19:10

HBase版本从0.94.0到0.96.0,变化比较大,由于Hadoop 2.0发布,HDFS已经发生变化,为了适应Hadoop 2.0的架构改变,HBase提供一个基于Hadoop 2.0的独立版本,该版本只支持Hadoop 2.0。同时,基于Hadoop 1.*版本的HBase继续存在,并且将长期存在,两个版本之间并不兼容,所以在发布、下载界面会看到两种版本的HBase同时存在,如下所示:

Name                    Last modified      Size  Description
hbase-0.96.1.1-hadoop1-bin.tar.gz    20-Dec-2013 03:50   70M
hbase-0.96.1.1-hadoop1-bin.tar.gz.mds    20-Dec-2013 03:50  1.3K
hbase-0.96.1.1-hadoop2-bin.tar.gz    20-Dec-2013 03:50   86M
hbase-0.96.1.1-hadoop2-bin.tar.gz.mds    20-Dec-2013 03:50  1.3K
hbase-0.96.1.1-src.tar.gz            20-Dec-2013 03:50  4.9M
hbase-0.96.1.1-src.tar.gz.mds        20-Dec-2013 03:50  1.1K

由于在写作本书时,HBase的0.96版本分支上只有0.96.1.1版本,所以这里使用该版本作为示例,该示例中包含hadoop 1、hadoop 2和源码三个部分,也是从0.96版本开始,HBase将保持两个版本并存的状态,这种状态将会在很长一段时间内持续存在。
这里不建议使用非稳定版本,即0.96及以上的版本,因为很多的新功能并没有经过工业界的验证。如果必须使用支持Hadoop 2.0的版本,建议使用0.96这个分支,因为这个分支已经迭代过不少小版本,相对稳定。另外,一直致力于Hadoop技术研发和推广、HBase核心贡献者、Hortonworks高级技术成员——Ted Yu对该版本的新功能、特性非常推崇,有些时候还是需要相信权威。
这里需要特别声明一下,本书的知识点讲解、安装部署、实战案例和性能调优等都是基于HBase 0.94版本的,该版本是写作本书时的最新稳定版。

1.2.3 HBase的特性

HBase作为一个典型的NoSQL数据库,可以通过行键(Rowkey)检索数据,仅支持单行事务,主要用于存储非结构化和半结构化的松散数据。与Hadoop相同,HBase设计目标主要依靠横向扩展,通过不断增加廉价的商用服务器来增加计算和存储能力。
“典型”代表着HBase有不少特性,这些特性都标志着HBase的特立独行、与众不同,同时其良好的出身和特性也奠定了其在大数据处理领域的地位。下面介绍HBase具备的一些非常显著的特点。
1.?容量巨大
HBase的单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数据量级都非常具有弹性。传统的关系型数据库,如Oracle和MySQL等,如果数据记录在亿级别,查询和写入的性能都会呈指数级下降,所以更大的数据量级对传统数据库来讲是一种灾难。而HBase对于存储百亿、千亿甚至更多的数据都不存在任何问题。对于高维数据,百万量级的列没有任何问题。有的读者可能关心更加多的列:千万和亿级别,这种非常特殊的应用场景,并不是说HBase不支持,而是这种情况下访问单个Rowkey可能造成访问超时,如果限定某个列则不会出现这种问题。
2.?面向列
HBase是面向列的存储和权限控制,并支持列独立检索。有些读者可能不清楚什么是列式存储,下面进行简单介绍。列式存储不同于传统的关系型数据库,其数据在表中是按某列存储的,这样在查询只需要少数几个字段的时候,能大大减少读取的数据量,比如一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩和解压算法。下面是传统行式数据库与列式数据库的不同特性。
传统行式数据库的特性如下:
数据是按行存储的。
没有索引的查询使用大量I/O。
建立索引和物化视图需要花费大量的时间和资源。
面对查询需求,数据库必须被大量膨胀才能满足需求。
列式数据库的特性如下:
数据按列存储,即每一列单独存放。
数据即索引。
只访问查询涉及的列,可以大量降低系统I/O。
每一列由一个线索来处理,即查询的并发处理性能高。
数据类型一致,数据特征相似,可以高效压缩。
列式存储不但解决了数据稀疏性问题,最大程度上节省存储开销,而且在查询发生时,仅检索查询涉及的列,能够大量降低磁盘I/O。这些特性也支撑HBase能够保证一定的读写性能。
3.?稀疏性
在大多数情况下,采用传统行式存储的数据往往是稀疏的,即存在大量为空(NULL)的列,而这些列都是占用存储空间的,这就造成存储空间的浪费。对于HBase来讲,为空的列并不占用存储空间,因此,表可以设计得非常稀疏。
4.?扩展性
HBase底层文件存储依赖HDFS,从“基因”上决定了其具备可扩展性。这种遗传的可扩展性就如同OOP中的继承,“父类”HDFS的扩展性遗传到HBase框架中。这是最底层的关键点。同时,HBase的Region和RegionServer的概念对应的数据可以分区,分区后数据可以位于不同的机器上,所以在HBase核心架构层面也具备可扩展性。HBase的扩展性是热扩展,在不停止现有服务的前提下,可以随时添加或者减少节点。
5.?高可靠性
HBase提供WAL和Replication机制。前者保证了数据写入时不会因集群异常而导致写入数据的丢失;后者保证了在集群出现严重问题时,数据不会发生丢失或者损坏。而且HBase底层使用HDFS,HDFS本身的副本机制很大程度上保证了HBase的高可靠性。同时,协调服务的ZooKeeper组件是经过工业验证的,具备高可用性和高可靠性。
6.?高性能
底层的LSM数据结构和Rowkey有序排列等架构上的独特设计,使得HBase具备非常高的写入性能。Region切分、主键索引和缓存机制使得HBase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能够达到毫秒级别。同时,HBase对于高并发的场景也具备很好的适应能力。该特性也是业界众多公司选取HBase作为存储数据库非常重要的一点。

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章