HBase 2.0版本正式发布

Apache HBase PMC主席Michael Stack在Mail List中宣布了HBase 2.0版本已正式Release的消息,该版本可以说是迄今为止最大的一个版本,共包含了4551个Issues(截止这篇文章写作之时,HBase社区共有20510个Issues,也就是说,这些Issues中共有22%的问题单被包含在2.0版本中)。

这距离HBase 1.0版本的发布已经过去了3年多的时间:

在1.0版本正式发布之前,我们看看几个比较大的版本相关信息:

  • 0.90.0版本于2011年1月19日发布,共包含1028个Issues。

  • 0.92.0版本于2012年1月23日发布,共包含695个Issues。

  • 0.94.0版本于2012年5月14日发布,共包含423个Issues。

  • 0.96.0版本于2013年10月19日发布,共包含290个Issues。

  • 0.98.0版本于2014年2月16日发布,共包含1307个Issues。

而在2.0版本之前,共有如下几个Minor Releases:

  • 1.1.0版本于2015年5月14日发布,共包含440个Issues

  • 1.2.0版本于2016年2月22日发布,共包含647个Issues

  • 1.3.0版本于2017年1月16日发布,共包含895个Issues

  • 1.4.0版本于2017年12月18日发布,共包含665个Issues

对比于1.0版本,只能说2.0版本中承载了太多的改动。一个版本承载了太多的Features也许是一件好事,但从质量上说,在短期上可能会带来一点担忧。

关于HBase版本定义

HBase从1.0.0版本开始,在版本定义上正式遵循了Semantic Versioning规范:

一个版本号,由三部分组成: MAJOR.MINOR.PATCH,关于这三部分数字的变更,定义如下:

  • MAJOR版本号变更:意味着可能带来不兼容的API变更。

  • MINOR版本号变更:主要是增加了一些功能特性,但API接口却是向前兼容的。

  • PATCH版本号变更:主要是针对Bug修复。

按照该定义,我们举例说明如下:

  • 从1.0.0到2.0.0版本,可能带来一些不兼容的API变更。

  • 从1.0.0到1.1.0版本,意味着合入了一些新的Feature,但API接口却是兼容的。

  • 从1.0.0版本到1.0.1版本,只是在1.0.0版本基础之上,做了一些Bug修复,但没有合入新的Feature。

但是,Semantic Versioning的相关定义,仅仅针对对外API接口。事实上,HBase的接口可能包含了两部分,一部分是供内部使用的Internal Interfaces,另外一部分是对外发布的External Interfaces。Coprocessors, MapReduce以及Spark所依赖的,是一些Internal Interfaces,如果这些接口发生了变更如何体现在版本号的变更中?另外,更广泛的兼容性,应该还要包含源文件/二进制Jar包文件级别的兼容性,序列化/反序列化级别的兼容性,IPC消息的兼容性,Protobufs相关的接口变更等等。因此,HBase Semantic Versioning需要更细节的一些定义,这些最新的定义,请参考HBase Document中的“HBase version number and compatibility”章节。

2.0关键特性

关于2.0版本所包含的一些关键特性,在以前的很多文章中都已经揭示过,这里再简单阐述一下:

  1. New region assignment manager

    基于Procedure V2的AssignmentManager V2,旨在能够更快速的分配Region,状态机的存储不再依赖于ZooKeeper,能够更好的应对Region长时间RIT问题。

  2. In-memory flush and compaction

    MemStore中的数据达到一定大小以后,不是直接Flush成HDFS中的HFile文件,而是先Flush到内存中的一个不可改写的Segment,这样,内存中的多个Segments可以预先合并,当达到一定的大小以后,才Flush成HDFS中的HFile文件,这样做的好处是希望有效降低Compaction所带来的写IO放大问题。

    在《一条数据的HBase之旅,简明HBase入门教程-Flush与Compaction》一文中,详细介绍了该特性。

  3. Off-heap read and write

    减少对Heap内存的使用,改用Offheap区的内存,有效减少GC压力。

  4. Async RPC Client

    利用异步RPC机制,提升客户请求并发度,提升Client端线程资源利用率。

  5. RegionServer Group

    将RegionServer划分成多个逻辑Group,提供多租户能力

  6. MOB

    让HBase更好的支持数KB甚至数MB级别的小对象存储,这些小对象采用独立的HFile文件进行存储,而且不参与普通的Compaction,这样不会因为小对象数据使得Compaction的写IO放大问题进一步恶化。

与1.x版本的兼容性

1.x版本的Client可以访问2.0版本的集群,进行正常的数据读写操作。但从1.x版本不停服务的情况下滚动升级到2.0版本是没法做到的,1.x版本的coprocessor/Endpoint不做改动的情况下也无法在2.0版本中正常使用。

对比HBaseCon Asia 2017大会上Stack的演讲内容,似乎有了一些出入,这说明2.0版本为了发布还是不得不做了一些割舍。

附:邮件原文

以下是stack关于2.0版本发布的原始邮件内容:

From:stack <st...@apache.org>
Subject:[ANNOUNCE] Apache HBase 2.0.0 is now available for download
Date:Mon, 30 Apr 2018 23:27:24 GMT

The HBase team is happy to announce the immediate availability of Apache
HBase 2.0.0.

Apache HBase™ is the Hadoop database, a distributed, scalable, big data
store. To learn more about HBase, see https://hbase.apache.org/.

HBase 2.0.0 is our second major release, the first release off the HBase
2.0 line.

Please review 'Upgrading from 1.x to 2.x' in the bundled HBase 2.0.0
Reference Guide before installing or upgrading for a list of notable
incompatibilities, major changes, and features including a new Region assignment manager ("AMv2"), a means for configuring the read and/or write path to run off-heap, and an
optional In-Memory Compaction ("IMC", A.K.A "Accordion") facility.

According to our adopted Semantic Versioning guidelines[2], we allowed ourselves make breaking changes in this major version release. For example, Coprocessors will need to be recast to fit more constrained APIs and rolling upgrade of an hbase-1.x install to hbase-2.x without downtime is (currently) not possible. That said, a bunch of effort has been expended mitigating the
differences; a hbase-1.x client can perform DML against an hbase-2 cluster.A bundled compatibility report showing difference from 1.2.6 may be of help
[3].

For the complete list of fixes and improvements, see the included
`CHANGES.md` (or online at [1]) and `RELEASENOTES.md`.

Download through an ASF mirror near you:

  http://www.apache.org/dyn/closer.lua/hbase/2.0.0/

The relevant checksums files are available at:

   https://www.apache.org/dist/hbase/2.0.0/hbase-2.0.0-src.tar.gz.sha512
   https://www.apache.org/dist/hbase/2.0.0/hbase-2.0.0-bin.tar.gz.sha512

Project member signature keys can be found at

  https://www.apache.org/dist/hbase/KEYS

PGP signatures are available at:

   https://www.apache.org/dist/hbase/2.0.0/hbase-2.0.0-src.tar.gz.asc
   https://www.apache.org/dist/hbase/2.0.0/hbase-2.0.0-bin.tar.gz.asc

For instructions on verifying ASF release downloads, please see

    https://www.apache.org/dyn/closer.cgi#verify

Question, comments, and problems are always welcome at:
dev@hbase.apache.org.

Thanks to all who contributed and made this release possible.

Cheers,
The HBase Dev Team

1. https://s.apache.org/hbase-2.0.0-JIRA-changes
2. http://hbase.apache.org/2.0/book.html#hbase.versioning.post10
3.
http://apache.mirrors.tds.net/hbase/2.0.0/compatibiliity_report_1.2.6vs2.0.0.html

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注