本节书摘来异步社区《HBase权威指南》一书中的第1章,第1.5节,作者: 【美】Lars George 译者: 代志远 , 刘佳 , 蒋杰 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.5 HBase:Hadoop数据库
看过BigTable的架构之后,我们可能会简单地认为HBase完全是Google的BigTable的开源实现。但是这个说法可能过于简单,因为两者之间还有些差异(大多是细微的)值得一提。
1.5.1 历史
HBase是Powerset㉑在2007年创建的,最初是Hadoop的一部分。之后,它逐步成为Apache软件基金会旗下的顶级项目,具备Apache软件许可证,版本为2.0。
HBase项目的主页是http://hbase.apache.org/,通过这个主页可以链接到文档(documentation)、wiki、源代码库(source repository),以及已经发布的库和源代码的下载站点。
下面是一个HBase随时间发展的简短概述。
- 2006年11月:Google发布BigTable论文。
- 2007年2月:HBase宣布在Hadoop项目中成立。㉒
- 2007年10月:HBase第一个“可用”版本(Hadoop 0.15.0)。
- 2008年1月:Hadoop成为Apache的顶级项目,HBase成为Hadoop的子项目。
- 2008年10月:HBase 0.18.1 发布。
- 2009年1月:HBase 0.19.0发布。
- 2009年9月:HBase 0.20.0 发布,性能有明显提升。
- 2010年5月:HBase成为Apache的顶级项目。
- 2010年6月:HBase 0.89.20100621,第一个开发版本。
- 2011年1月:HBase 0.90.0 发布,稳定性和持久性有所提升。
- 2011年年中:HBase 0.92.0 发布,支持协处理器和安全控制。
文字2010年5月前后,HBase的开发者决定打破一直依赖的、步调一致的Hadoop的版本编号。原因是HBase有一个更快的发布周期,同时更接近1.0版本的水平,比Hadoop的预期更快。
为此,版本号从0.20.x跳到了0.89.x,跳跃相当明显。此外,还做了一个决定,将0.89.x定为早期的开发版本。在0.89的基础上最终发布了0.90,即面向所有用户的稳定版。
1.5.2 命名
HBase与BigTable最大的不同就是命名。表1-1罗列了两个系统之间相同组件的命名有哪些不同。
更多的差异参见附录F。
1.5.3 小结
让我们回到1.3.1节来看看怎样用维度来描述HBase系统。HBase是一个分布式的、持久的、强一致性的存储系统,具有近似最优的写性能(能使I/O利用率达到饱和) 和出色的读性能,它充分利用了磁盘空间,支持特定列族切换可选压缩算法。
HBase继承自BigTable模型,只考虑单一的索引,类似于RDBMS中的主键,提供了服务器端钩子,可以实施灵活的辅助索引解决方案。此外,它还提供了过滤器功能,减少了网络传输的数据量。
HBase并未将说明性查询语言作为核心实现的一部分,对事务的支持也有限。但行原子性和“读-修改-写”操作在实践中弥补了这个缺陷,它们覆盖了大部分的使用场景并消除了在其他系统中经历过的死锁、等待问题。
HBase在进行负载均衡和故障恢复时对客户端是透明的。在生产系统中,系统的可扩展性体现在系统自动伸缩的过程中。更改集群并不涉及重新全量负载均衡和数据重分区,但整个处理过程完全是自动化的。
①例如,参见Michael Stonebraker和UğurÇetintemel撰写的文章“‘One Size Fits All’:An Idea Whose Time Has Come and Gone”(http://www.cs.brown.edu/~ugur/fits_all.pdf)。
②相关信息可以在Hadoop的官方网站http://hadoop.apache.org/中找到。也可以到Tom White编写的《Hadoop权威指南(第2版)》(原出版社为O’Reilly)一书中查阅你想了解的Hadoop知识。
③此处引用的是Kimball集团的Ralph Kimball博士的一篇题为“Rethinking EDW in the Era of Expansive Information Management”的演讲(http://www.informatica.com/campaigns/rethink_edw_kimball.pdf),这个演讲讨论了一个不断发展的企业数据仓库市场的需求。
④Edgar F. Codd定义了13个规则(编号为0~12),这些规则促使数据库管理系统(Datebase Management System,DBMS)被考虑为RDBMS。HBase需要满足更多的通用规则,但也有一些规则没有满足,最重要的是规则5:全面的数据子语言规则,这个规则定义了至少需要支持一种关系型语言。详情见维基百科关于科德十二定律的链接http://en.wikipedia.org/wiki/Codd's_12_rules。
⑤见Facebook提供的信息http://www.facebook.com/note.php?note_id=89508453919。
⑥请看博文http://www.facebook.com/note.php?note_id=454991608919,这篇博文来自Facebook的工程团队。150亿条墙消息和1200亿条聊天消息,共计1350亿条消息一个月。此外,Facebook还添加了SMS和其他一些应用,这些都会使数据量变得更为庞大。
⑦Facebook使用了Haystack,Haystack优化了二进制大对象的存储结构,提供了二进制小对象存储,例如图片。
⑧见http://www.slideshare.net/brizzzdotcom/facebook-messages-hbase,这是Facebook的员工Nicolas Spiegelberg写的,他也是HBase的committer。
⑨Linux、Apache、MySQL和PHP(或者Perl和Python)的缩写。
⑩Atomicity、Consistency、Isolation和Durability的缩写。
⑪Memcached是基于内存的、非持久化的、非分布式的键值存储系统。参见Memcached项目的主页http://memcached.org/。
⑫见维基百科中的“NoSQL”(http://en.wikipedia.org/wiki/NoSQL)。
⑬见Eric Brewer的论文http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf,后期Gilbert与Lynch发表了PDF版,详情见http://lpd.epfl.ch/sgilbert/pubs/BrewersConjecture-SigAct.pdf。
⑭见Brewer的论文“Lessons from giant-scale services. Internet Computing”,IEEE,2001,5 (4):46~55 (http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=939450)。
⑮见Jim Gray等人的“FT 101”(http://research.microsoft.com/en-us/um/people/gray/talks/UCBerkeley_Gray_FT_Avialiability_talk.ppt)。
⑯DDI这个词是Salmen博士等人于2009年在“Cloud Data Structure Diagramming Techniques and Design Patterns”一文中提出的。
⑰请注意,这仅仅是一个演示用例,所以故意将模式设计得很简单。
⑱在5.1.3节中会看到,还可以不设置qualifier。
⑲虽然HBase不支持在线的region合并,但是有离线处理合并的工具,详情见11.6节。
⑳有关Apache ZooKeeper的更多信息请参见Apache ZooKeeper官方网站(http://hadoop.apache.org/zookeeper/)。
㉑Powerset公司位于旧金山,开发了一套用于互联网的自然语言搜索引擎。在2008年7月1日,微软公司收购了Powerset,之后Powerset放弃了对HBase开发的后续支持。
㉒在Apache JIRA(网站上的问题追踪系统)中找到HBASE-287,里面可以找到当时的记录,读者可以看到Mike Cafarella提交的最初代码,这个代码很快就被Jim Kellerman采纳了,Jim Kellerman当时就职于Powerset。