1.3 HBase与Hadoop的关系
HBase参考了Google的BigTable建模,且将下面三篇博文作为HBase实现的理论基础:
BigTable by Google(2006)
HBase and HDFS Locality by Lars George(2010)
No Relation:The Mixed Blessings of Non-Relational Databases by Ian Varley(2009)
从上面的博文列表中也可以看出,HBase和HDFS有着非常紧密的关系,更准确的说法是:HBase严重依赖Hadoop的HDFS组件,HBase使用HDFS作为底层存储系统。因此,如果要使用HBase,前提是首先必须有Hadoop系统。从后面第2章的HBase安装过程的讲解中也可以总结出这点。Hadoop的组件之一MapReduce可以直接访问HBase,但是,这不是必需的,因为HBase中最重要的访问方式是原生Java API,而不是MapReduce这样的批量操作方式。图1-2展示了HBase在Hadoop生态系统中的位置。
因为HBase底层依赖Hadoop,所以选择Hadoop版本对HBase部署很关键。表1-1显示了不同HBase发行版本所支持的Hadoop版本信息。基于HBase版本,应该选择合适的Hadoop版本,表1-1中是官方给出的HBase和Hadoop的版本支持矩阵。
表1-1中字母的含义如下。
S:经过测试的、支持的。
X:不支持。
NT:可以运行但测试不充分。
当然,并不是说只要满足表1-1中的版本匹配就万事大吉了,在考虑版本匹配的同时,也需要考虑一些其他因素,例如:
如果使用0.94.x运行在Hadoop 2.2.0版本上,需要重新编译0.94.x。
对于ZooKeeper的版本只需要跟HBase依赖库中的ZooKeeper保持一致即可。