前言

HBase 2.0 发布了很多新的特性,其中一个非常值得关注的是中等对象存储的特性,即 HBase MOB( )特性。HBase 2.0 MOB的引入,扩宽了HBase在人工智能、物联网等领域的应用场景。

初识HBase MOB

HBase MOB特性是由HBASE-11339这个issue引入的,主要解决的是HBase对中等大小对象(100KB~10MB)的低延时读写支持,提升HBase对象存储的能力。这个特性的引入,使得HBase能够非常适合存储图片、文件、短视频等二进制对象,拓宽了HBase在人工智能、物联网等领域的应用场景。

在MOB特性引入之前,HBase也能够存储大小在100KB以上的二进制对象,但是HBase针对大小100KB以下的数据在读写路径上做了优化,因此在处理大量的大小在100KB以上的数据时,性能其实非常低效,由压缩与分裂带来的I/O压力会使HBase整体性能下降,这也是要引入MOB的原因。当使用MOB特性时,理想的二进制对象大小应该在100KB~10MB之间,超过10MB的文件HBase也能够进行存储但是效率相对比较低,一些较大的文件还是建议直接存放在HDFS上,充分发挥HDFS文件存储的能力。

剖析HBase MOB 架构设计

包含MOB特性的HBase整体架构如下图:

由于大部分担心来自于压缩带来的IO压力,因此HBase 2.0将MOB移出普通的管理来避免 split和。HBase MOB在架构设计上类似于 HBase + HDFS 的方式,通过分离文件引用和 MOB 对象的 IO 路径来实现。

版本支持

HBase MOB是HBase 2.0 版本引入的特性,详见HBASE-11339,因此原生的 HBase要2.0及以上版本才支持。

此外,目前使用比较多的CDH和HDP均已提前解决了HBase-11339 issue,在各自更早的HBase版本中便已经支持MOB特性了,具体情况如下:

如何开启MOB特性

开启HBase MOB特性有一个先决条件,就是必须支持HFile v3。通过修改hbase-site.xml中hfile..属性值为 3 得到支持:

<property>
  <name>hfile.format.version</name>
  <value>3</value>
</property>

满足先决条件后,开启MOB其实很简单,创建表时指定以下列族属性或修改列族属性:

HBase Shell命令:

hbase> ‘t1’, {NAME => ‘f1’, => true, => }

hbase> alter ‘t1’, {NAME => ‘f1’, => true, => }

HBase API代码:

HColumnDescriptor hcd = new HColumnDescriptor(“f”);
hcd.setMobEnabled(true);
hcd.setMobThreshold(102400L);

配置MOB压缩策略

为了减少MOB 的数量以提升性能,HBase会定期做MOB ,默认是按天压缩。

chatgpt架构2.0功能_架构系统_架构模块

另外,HBASE-16981又引入了按周和月的MOB压缩聚合策略,改善了MOB的存储(CDH HBase自CDH5.11.0开始支持HBASE-16981修复的版本)。

通过属性设置不同的压缩聚合策略,可选值有daily、和,例如:

hbase> alter ‘t1’, {NAME => ‘f1’, => true, => , => ‘’}

配置MOB缓存属性

为了提高MOB读取的性能,服务端会保留一级LRU缓存,相关的参数包含:

MOB功能/性能测试

HBase官网提供一个用于测试MOB功能的工具类org…hbase.tMOB,可以通过命令行直接使用,命令如下:

$ hbase org…hbase.

– 1024

– 512

– 5120

其中各个参数的含义如下:

通过该工具类测试,控制台会打印类似下面的信息,供参考:

19/04/08 19:55:23 INFO util.: [W:20] Keys=5248, cols=58.3 K, time=00:00:05 : [keys/s= 1048, =18 ms] : [keys/s=1049, =18 ms], =

HBase MOB小结

HBase 2.0 重新定义了中等大小对象随机读写的方式,为HBase对象存储提供了一体化的解决方案,拓展了HBase的应用场景。请关注后续HBase MOB 特性实际使用场景介绍。

参考文档:

往期推荐

1、HBase最佳实践 | 聊聊HBase核心配置参数

2、 Hudi:剑指数据湖的增量处理框架

3、社区比 Ozone 更重要的事情

4、 和 Spark 结业篇