HBase 2.0 MOB 保存图片小视频利器

HBase 2.0 MOB

初步了解

HBase MOB主要解决的是100KB--10MB文件保存。MOB的引入,使得HBase非常适合存储图片、文件、短视频等二进制对象。

MOB之前,也可以保存100KB以上的文件,但是HBase性能比常差,理论上MOB二进制对象大小应该在100KB--10MB之间,超过10MB的文件HBase也能进行存储但是效率相对比较低,不过可以采用切割文件的方式,把文件分为小于10M大小的文件进行保存,获取时候再进行合并。超过100M的文件,建议直接存放在HDFS上。

版本支持

HBase MOB是HBase 2.0 版本引入的功能,因此Apache HBase要2.0及以上版本才支持。

CDH5.4.x版本开始支持MOB

HDP2.5.x版本开始支持MOB

MOB开启

1.HFile v3的配置

通过修改hbase-site.xml中hfile.format.version属性值为 3

<property>

  <name>hfile.format.version</name>

  <value>3</value>

</property>

在HBase 2.0中3是默认配置。

2.修改列族属性

IS_MOB:设置为true

MOB_THRESHOLD:设置MOB阈值,超过阈值的被当做MOB存储,默认100KB。

3.HBase Shell命令

hbase(main):005:0> create 'test141', {NAME => 'f2', IS_MOB => true, MOB_THRESHOLD =>102400}

hbase(main):005:0> alter 'test141', {NAME => 'f2', IS_MOB => true, MOB_THRESHOLD =>102400}

hbase(main):006:0> describe 'test141'

                                                                                                                                                                                                               {NAME => 'f2', MOB_THRESHOLD => '102400', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', IS_MOB => 'true', COMPRESSION => 'NONE',

 BLOCKCACHE => 'true', BLOCKSIZE => '65536'}                                                                                                                                                                                                

4.scala代码:


def modifyColumnFamily2_0(conn: Connection, admin: Admin, tableName: String, familyName: String*): Unit = {
 
try {
    admin.disableTable(TableName.valueOf(tableName))
   
for (cf <- familyName) {
     
val cdb = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(cf))
      cdb.setMaxVersions(
1)
    
 cdb.setMobEnabled(true)
      cdb.setMobThreshold(102400)

      val cfd: ColumnFamilyDescriptor = cdb.build()
      admin.modifyColumnFamily(TableName.valueOf(tableName)
, cfd)
    }
  }
 
catch {
   
case exception: Exception =>
      exception.printStackTrace()
  }
finally {
    admin.enableTable(TableName.valueOf(tableName))
  }
}

MOB压缩

HBase会定期做压缩,默认值按天处理。

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

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

hbase(main):007:0> alter 'test141', {NAME => 'f2', IS_MOB => true, MOB_THRESHOLD =>102400,MOB_COMPACT_PARTITION_POLICY =>'weekly'}

                                                                                                                                                                                                             

hbase(main):008:0> describe 'test141'

{NAME => 'f2', MOB_THRESHOLD => '102400', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER'

, MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', IS_MOB => 'true', COMPRESSION => 'NONE',BLOCKCACHE => 'true', BLOCKSIZE => '65536', MOB_COMPACT_PARTITION_POLICY => 'WEEKLY'}                                                                                                                                                     

MOB缓存

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

hbase.mob.file.cache.size:缓存MOB文件的数量,默认1000;

hbase.mob.cache.evict.period:缓存清理周期,默认是3600s;

hbase.mob.cache.evict.remain.ratio:缓存清理后保留文件的比例,取值范围为0~1,默认0.5f。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值