1.1 HBase前生今世
1. HBase历史发展
要说清楚HBase的来龙去脉,还得从Google当年风靡一时的“三篇论文”——GFS、MapReduce、BigTable说起。2003年Google在SOSP会议上发表了大数据历史上第一篇公认的革命性论文——《 GFS: The Google File System 》,之所以称其为“革命性”是有多方面原因的:首先,Google在该论文中第一次揭示了如何在大量廉价机器基础上存储海量数据,这让人们第一次意识到海量数据可以在不需要任何高端设备的前提下实现存储,换句话说,任何一家公司都有技术实力存储海量数据,这为之后流行的海量数据处理奠定了坚实的基础。其次,GFS体现了非常超前的设计思想,以至于十几年之后的今天依然指导着大量的分布式系统设计,可以说,任何从事分布式系统开发的人都有必要反复阅读这篇经典论文。
2004年,Google又发表了另一篇非常重要的论文——《 MapReduce: Simplef ied Data Processing on Large Clusters 》,这篇论文论述了两个方面的内容,其中之一是MapReduce的编程模型,在后来的很多讨论中,人们对该模型褒贬不一,该编程模型在之后的技术发展中接受了大量的架构性改进,演变成了很多其他的编程模型,例如DAG模型等。当然,MapReduce模型本身作为一种基础模型得到了保留并依然运行在很多特定领域(比如,Hive依然依赖MapReduce处理长时间的ETL业务)。MapReduce在GFS的基础上再一次将大数据往前推进了一步,论文论述了如何在大量廉价机器的基础上稳定地实现超大规模的并行数据处理,这无疑是非常重要的进步。这篇论文无论在学术界还是在工业界都得到了极度狂热的追捧。原因无非是分布式计算系统可以套用于大量真实的业务场景,几乎任何一套单机计算系统都可以用MapReduce去改良。
2006年,Google发布了第三篇重要论文——《 BigTable: A Distributed Storage System for Structured Data 》,用于解决Google内部海量结构化数据的存储以及高效读写问题。与前两篇论文相比,这篇论文更难理解一些。这是因为严格意义上来讲,BigTable属于分布式数据库领域,需要读者具备一定的数据库基础,而且论文中提到的数据模型(多维稀疏排序映射模型)对于习惯了关系型数据库的工程师来说确实不易理解。但从系统架构来看,BigTable还是有很多GFS的影子,包括Master-Slave模式、数据分片等。
这三篇论文在大数据历史上,甚至整个IT界的发展历史上都具有革命性意义。但真正让大数据“飞入寻常百姓家”,是另一个科技巨头——Yahoo。Google的三篇论文论证了在大量廉价机器上存储、处理海量数据(结构化数据、非结构化数据)是可行的,然而并没有给出开源方案。2004年,Doug Cutting和Mike Cafarella在为他们的搜索引擎爬虫(Nutch)实现分布式架构的时候看到了Google的GFS论文以及MapReduce论文。他们在之后的几个月里按照论文实现出一个简易版的HDFS和MapReduce,这也就是Hadoop的最早起源。最初这个简易系统确实可以稳定地运行在几十台机器上,但是没有经过大规模使用的系统谈不上完美。所幸他们收到了Yahoo的橄榄枝。在Yahoo,Doug领导的团队不断地对系统进行改进,促成了Hadoop从几十台到几百台再到几千台机器规模的演变,直到这个时候,大数据才真正在普通公司实现落地。
至于BigTable,没有在Yahoo内得到实现,原因不明。一家叫做Powerset的公司,为了高效处理自然语言搜索产生的海量数据实现了BigTable的开源版本——HBase,并在发展了2年之后被Apache收录为顶级项目,正式入驻Hadoop生态系统。HBase成为Apache顶级项目之后发展非常迅速,各大公司纷纷开始使用HBase,HBase社区的高度活跃性让HBase这个系统发展得更有活力。有意思的是,Google在将BigTable作为云服务对外开放的时候,决定提供兼容HBase的API。可见在业界,HBase已经一定程度上得到了广泛的认可和使用。
2. HBase使用现状
HBase在国外起步很早,包括Facebook、Yahoo、Pinterest等大公司都大规模使用HBase作为基础服务。在国内HBase相对起步较晚,但现在各大公司对于HBase的使用已经越来越普遍,包括阿里巴巴、小米、华为、网易、京东、滴滴、中国电信、中国人寿等公司都使用HBase存储海量数据,服务于各种在线系统以及离线分析系统,其中阿里巴巴、小米以及京东更是有着数千台HBase的集群规模。业务场景包括订单系统、消息存储系统、用户画像、搜索推荐、安全风控以及物联网时序数据存储等。最近,阿里云、华为云等云提供商先后推出了HBase云服务,为国内更多公司低门槛地使用HBase服务提供了便利。
另外,相比其他技术社区,HBase社区非常活跃,每天都会有大量的国内外工程师参与HBase系统的开发维护,大部分问题都能在社区得到快速积极的响应。近几年,HBase社区中,国内开发者的影响力开始慢慢扩大,在某些功能领域甚至已经占据主导地位。
3.HBase版本变迁
HBase从2010年开始前前后后经历了几十个版本的升级,不断地对读写性能、系统可用性以及稳定性等方面进行改进,如图1-1所示。在这些版本中,有部分版本在HBase的发展历程中可谓功勋卓著。
图1-1 HBase版本变迁
0.94.x版本是HBase历史上第一个相对稳定的生产线版本,国内最早使用HBase的互联网公司(小米、阿里、网易等)都曾在生产线上大规模使用0.94.x作为服务版本,即使在当前,依然还有很多公司的业务运行在0.94.x版本,可见0.94.x版本在过去的几年时间里是多么辉煌。
之后的2年时间,官方在0.94版本之后发布了两个重要版本:0.96版本和0.98版本,0.96版本实现了很多重大的功能改进,比如BucketCache、MSLAB、MTTR优化等,但也因为功能太多而引入了很多bug,导致生产线上真正投入使用的并不多。直至0.98版本发布。0.98版本修复了大量的bug,大大提升了系统可用性以及稳定性。不得不说,0.98版本是目前业界公认的HBase历史上最稳定的版本之一,也是目前生产线上使用最广泛的版本之一。
2015年2月,社区发布了1.0.0版本,这个版本带来的最大改变是规范了HBase的版本号,此后的版本号都统一遵循semantic versioning语义,如图1-2所示。
图1-2 HBase版本规则
比如1.2.6版本中MAJOR版本是1,MINOR版本是2,PATCH是6。不同MAJOR版本不保证功能的兼容性,比如2.x版本不保证一定兼容1.x版本。MINOR版本表示会新增新的功能,比如1.2.x会在1.1.x的基础上新增部分功能。而PATCH版本只负责修复bug,因此可以理解为MAJOR、MINOR相同的情况下,PATCH版本越大,系统越可靠。
在1.0的基础上官方先后发布了1.1.x、1.2.x、1.3.x以及1.4.x等多个版本。因为稳定性的原因,并不建议在生产线上使用1.0.0~1.1.2中间的版本。目前,HBase社区推荐使用的稳定版本为1.4.10。
2.x版本是接下来最受期待的一个版本(升级要慎重,请参考社区中的实践),因为最近一两年社区开发的新功能都将集中在2.x版本发布,2.x包含的核心功能特别多,包括:大幅度减小GC影响的offheap read path/write path工作,极大提升系统稳定性的Procedure V2框架,支持多租户隔离的RegionServer Group功能,支持大对象存储的MOB功能等。