更新时间:2024-05-11 GMT+08:00

配置MOB

配置场景

在实际应用中,需要存储大大小小的数据,比如图像数据、文档。小于10MB的数据一般都可以存储在HBase上,对于小于100KB的数据,HBase的读写性能是优秀的。如果存放在HBase的数据大于100KB甚至到10MB大小时,插入同样个数的数据文件,但是总的数据量会很大,会导致频繁的compaction和split,占用很多CPU,磁盘IO频率很高,性能严重下降。

通过将MOB(Medium-sized Objects)数据(即100KB到10MB大小的数据)直接以HFile的格式存储在文件系统上(例如HDFS文件系统),通过expiredMobFileCleaner和Sweeper工具集中管理这些文件,然后把这些文件的地址信息及大小信息作为value存储在普通HBase的store上。这样就可以大大降低HBase的compaction和split频率,提升性能。

HBase当前默认开启MOB功能,相关配置项如表1所示。如果需要使用MOB功能,用户需要在创建表或者修改表属性时在指定的列族上指定使用mob方式存储数据。

本章节适用于MRS 3.x及之后版本。

配置描述

为了开启HBase MOB功能,用户需要在创建表或者修改表属性时在指定的列族上指定使用mob方式存储数据。

使用代码声明使用mob存储的方式:

HColumnDescriptor hcd = new HColumnDescriptor("f");
hcd.setMobEnabled(true);

使用shell声明使用mob的方式,MOB_THRESHOLD单位是字节:

hbase(main):009:0> create 't3',{NAME => 'd', MOB_THRESHOLD => '102400', IS_MOB => 'true'}

0 row(s) in 0.3450 seconds

=> Hbase::Table - t3
hbase(main):010:0> describe 't3'
Table t3 is ENABLED


t3


COLUMN FAMILIES DESCRIPTION


{NAME => 'd', MOB_THRESHOLD => '102400', VERSIONS => '1', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', 
TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW',
IN_MEMORY => 'false', IS_MOB => 'true', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}

1 row(s) in 0.0170 seconds

参数入口:

在FusionInsight Manager系统中,选择“集群 > 待操作集群的名称 > 服务 > HBase > 配置”,单击“全部配置”。在搜索框中输入参数名称。

表1 参数描述

参数

描述

默认值

hbase.mob.file.cache.size

已经打开的文件句柄的缓存区大小。如果该值设置的比较大,cache可以缓存更多的文件句柄,从而降低打开关闭文件的频率。但是如果该值设置过大会导致打开的文件句柄数过多。默认值是:“1000”。此参数在服务端ResionServer上配置。

1000

hbase.mob.cache.evict.period

缓存mob文件在mob缓存中的超期时间,单位为秒。

3600

hbase.mob.cache.evict.remain.ratio

mob cache回收之后保留的文件个数占cache容量个数的比例。hbase.mob.cache.evict.remain.ratio是一个算法因子,当缓存mob文件数达到hbase.mob.file.cache.size*hbase.mob.cache.evict.remain.ratio的大小后触发缓存回收。

0.5

hbase.master.mob.ttl.cleaner.period

过期文件清理任务的运行周期,以秒为单位。默认值是一天(86400秒)。

说明:

如果生存时间值过期了,即文件从创建起已经超过了24小时,则MOB文件将会被过期mob文件清理工具删除。

86400