性能相关
- 读缓存改进: HDFS 将图片和checksum存储在不同的block中的,所以每次我们进行读操作,都需要进行两次磁盘操作(一次读数据文件,一次读checksum所在的文件)。在 HBASE-5074 这个提案中,提出了将checksum存到block 缓存中的想法。在0.94 版本中,这一特性已经是默认开启的了。
- 读文件优化: 在0.94 版本之前,如果一个column family对应了多个StoreFile,那么HBase 会从各个StoreFile中读取数据进行合并,即使我们需要的数据在最近的数据文件中存在,也会进行这样的操作。在 HBASE-4465 这个提案中提出了一个叫Lazy Seek的优化,通过先在最近的StoreFile中先读取数据,再看其它StoreFile是否在这个数据操作时间后有操作,如果没有,就不对这个StoreFile进行读取了。这大大减少了对StoreFile的读操作,这一特性也已经是默认开启了。
- WAL文件优化: WAL是Write Ahead Log的意思,HBase在每次写操作都会先写WAL文件,通常WAL文件的写入速度直接影响到HBase的整体数据吞吐。而且WAL文件还会根据配置同步到多个数据节点上。在提案HBASE-4608 中,提到了对Hlog数据进行压缩的想法,同步后的日志文件更小,能够更快地在数据节点间的同步,从而实现更高的数据吞吐。目前这一优化也是默认开启。
新特性
- 急求箱工具增强: 对原来的HBck工具进行了增强,提供了对孤儿region、region空洞、重叠region的修复。见提案 HBASE-5128: “Uber hbck”。
- 简化Region Size设置: 通常我们要设置一个region size是很难的,需要考虑很多其它因素。在0.94版本中,按提案 HBASE-4365 的方法,通过动态算法对region size进行制定。
- 更完整的事务支持: 之前Hbase提供行级的事务,不过每次事务只能执行一个写操作,比如连续地执行一系列Put,Delete操作,那么这些操作是单独一个个的事务,其整体并不是原子性执行的。而在0.94版本中,可以实现Put、Delete在同一个事务中一起原子性执行。见提案 HBASE-3584。
实际上上面不过是一些比较大的改进,这一版本共做了140个功能增强,修复了180个bug。这里可以看到更详细的更新。