1.HBase 2.0版本正式发布
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。
关于2.0版本所包含的一些关键特性,在以前的很多文章中都已经揭示过,这里再简单阐述一下:
New region assignment manager
基于Procedure V2的AssignmentManager V2,旨在能够更快速的分配Region,状态机的存储不再依赖于ZooKeeper,能够更好的应对Region长时间RIT问题。
In-memory flush and compaction
MemStore中的数据达到一定大小以后,不是直接Flush成HDFS中的HFile文件,而是先Flush到内存中的一个不可改写的Segment,这样,内存中的多个Segments可以预先合并,当达到一定的大小以后,才Flush成HDFS中的HFile文件,这样做的好处是希望有效降低Compaction所带来的写IO放大问题。
在《一条数据的HBase之旅,简明HBase入门教程-Flush与Compaction》一文中,详细介绍了该特性。
Off-heap read and write
减少对Heap内存的使用,改用Offheap区的内存,有效减少GC压力。
Async RPC Client
利用异步RPC机制,提升客户请求并发度,提升Client端线程资源利用率。
RegionServer Group
将RegionServer划分成多个逻辑Group,提供多租户能力
MOB
让HBase更好的支持数KB甚至数MB级别的小对象存储,这些小对象采用独立的HFile文件进行存储,而且不参与普通的Compaction,这样不会因为小对象数据使得Compaction的写IO放大问题进一步恶化。
1.x版本的Client可以访问2.0版本的集群,进行正常的数据读写操作。但从1.x版本不停服务的情况下滚动升级到2.0版本是没法做到的,1.x版本的coprocessor/Endpoint不做改动的情况下也无法在2.0版本中正常使用。
对比HBaseCon Asia 2017大会上Stack的演讲内容,似乎有了一些出入,这说明2.0版本为了发布还是不得不做了一些割舍。