配置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 > 配置”,单击“全部配置”。在搜索框中输入参数名称。
参数 |
描述 |
默认值 |
---|---|---|
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 |