转载

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

《HBase企业应用开发实战》原版授权,未经允许不得转载!

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.1.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的基本介绍、表设计、行键设计和底层数据存储结构设计等内容[1]。

经过一段时间的酝酿和开发工作,在2007年10月第一个可用的、简单的HBase版本发布,该版本只实现了最基本的模块和功能,因为只是初始开发阶段,此时的HBase版本发展很不完善。2008年1月,Hadoop升级为顶级项目,HBase作为Hadoop的一个子项目存在,HBase的活跃度非常高,在短短不到2年的时间经历了N多版本的发布,并且其中包含了版本号的大“跳跃”。下面是一些版本发布的信息:

■   hbase-0.18.0于2008-9-21发布

■   hbase-0.20.6于2010-07-10发布

■   hbase-0.89.20100621于2010-06-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.1.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。这些小版本都是基于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 isstill '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。同时,基于Hadoop1.*版本的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版本,所以这里使用该版本作为列举示例,该示例中包含hadoop1、hadoop2和源码三个部分,也是从0.96版本开始,HBase将保持两个版本并存的状态,这种状态将会在很长一段时间内持续存在。

这里不建议使用非稳定版本,即0.96及以上的版本,因为很多的新功能并没有经过工业界的验证。如果必须使用支持Hadoop 2.0的版本,建议使用0.96这个分支,因为这个分支已经迭代过不少小版本,相对稳定,还有一直致力于Hadoop技术研发和推广、HBase核心贡献者、Hortonworks高级技术成员——Ted Yu对该版本的新功能、特性非常推崇,有些时候还是需要相信权威。

这里需要特别声明一下,本书的知识点讲解、安装部署、实战案例和性能调优等都是基于HBase 0.94版本的,该版本是写作本书时的最新稳定版。

1.1.3   HBase的特性

HBase作为一个典型的NoSQL数据库,可以通过行键(Rowkey)检索数据,仅支持单行事务,主要用于存储非结构化和半结构化的松散数据。与Hadoop相同,HBase设计目标主要依靠横向扩展,通过不断增加廉价的商用服务器来增加计算和存储能力。

“典型”代表着HBase有不少特性,这些特性都标志着HBase的特立独行、与众不同,同时其良好的出身和特性也奠定了其在大数据处理领域的地位。下面介绍HBase具备的一些非常显著的特点。

1.       容量巨大

HBase的单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数据量级都非常弹性。传统的关系型数据库,如Oracle和MySQL等,如果数据记录在亿级别,查询和写入的性能都会指数级下降,所以更大的数据量级对传统数据库来讲是一种灾难。而HBase对于存储百亿、千亿甚至更多的数据都不存在任何问题。对于高维数据,百万量级的列没有任何问题。有的读者可能关心更加多的列:千万和亿级别,这种非常特殊的应用场景,并不是说HBase不支持,而是这种情况下访问单个Rowkey可能造成访问超时,如果限定某个列则不会出现这种问题。

2.       面向列

HBase是面向列的存储和权限控制,并支持列独立检索。有些读者可能不清晰什么是列存储,下面做一下简单介绍。列存储不同于传统的关系型数据库,其数据在表中是按某列存储的,这样在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩和解压算法。图1-2描述了行存储与列存储的区别。

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

图1-2      行式存储和列式存储的区别

列式存储不但解决了数据稀疏性问题,最大程度上节省存储开销,而且在查询发生时,仅检索查询涉及的列,能够大量降低磁盘IO。这些特性也支撑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作为存储数据库非常重要的一点。

[1]参见https://cwiki.apache.org/confluence/display/DIRxSBOX/HBase+Prototype。

原文  http://www.adintellig.com/hbase-in-action-1-2/
正文到此结束
Loading...