文档章节

HBase中存取图片、文档数据(HBase MOB)

jeff-qq
 jeff-qq
发布于 2017/10/19 10:46
字数 951
阅读 3297
收藏 1

Hbase MOB介绍

HBase通常存取小于10K的数据性能很好,如果文件稍大点,比如中等文件的大小,大小在100K<10M之间,由于压缩会带来性能下降,会导致region不可用。

为了解决这个问题,HBase引入了对中等大小文件的支持,也就是Hbase MOB(The Moderate Object Storage)特性,或者叫Hbase对象存储。详见HBase-11339

关于HBase MOB的介绍,可以参考一下几篇文章:

这个特性在HBase 2.0.0版本才被合入,由于现在还是Beta版本,所以不推荐使用。

如果你想使用这个特性,推荐使用以下版本:

  1. Cloudera - CDH 5.4.x及之后版本
  2. Hortonworks - HDP 2.5及之后版本
  3. 华为 - FusionInsight_HBase (不开源,通常在电信行业使用)

适用场景

这个特性适合将图片、文档、PDF、小视频存储到Hbase中。

典型的场景:

  • 银行存取客户签字或扫描件。
  • 交通部门存取过车图片。

MOB配置方法

  1. 启用HFile Version 3

在hbase-si te.xml添加属性

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

  2. 将列指定为MOB类型

  • IS_MOB 设置为true,将这个列存为MOB.
  • MOB_THRESHOLD 设置阈值。超过阈值大小的文件,就被当成MOB对待。默认阈值为100KB。

HBase Shell语句:

hbase> create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 102400}
hbase> alter 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD =>
102400}

如果用JAVA API,则代码如下:

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

HBase MOB 缓存设置

属性 默认值 说明
hbase.mob.file.cache.size 1000 缓存文件数量
hbase.mob.cache.evict.period 3600 缓存清理时间
hbase.mob.cache.evict.remain.ratio 0.5f float类型,0和1之间

MOB测试

$ sudo -u hbase hbase org.apache.hadoop.hbase.IntegrationTestIngestMOB \
            -threshold 102400 \
            -minMobDataSize 512 \
            -maxMobDataSize 5120

手动压缩MOB文件

使用compact_mob和major_compact_mob.

第一个参数是表名,只传表名,则表中所有的MOB列都压缩。

第二个参数是列名,如果传入列名,则只压缩指定列。

hbase> compact_mob 't1'
hbase> compact_mob 't1', 'f1'
hbase> major_compact_mob 't1'
hbase> major_compact_mob 't1', 'f1'

设置MOB压缩策略(按周/月压缩成一个文件)

默认每天的MOB压缩成一个文件。

Apache HDFS对同一个目录下的文件数量有内存限制。MOB文件的数量超过此HDFS限制后,MOB表不可再写入。 Apache HDFS单个目录默认最大文件数量为100万。

一年365天,每天一个文件,如果有1000个region,那么一年就产生36.5万个文件,3年就会超过这个限制。区域越多,达到极限的速度越快。

因此,如果需要,可以设置为每周的数据压缩成一个文件,或者每月的数据压缩成一个文件。

默认情况下,按天使用MOB压缩分区策略。要应用每周或每月策略,就需要为MOB列族添加了一个新属性MOB_COMPACT_PARTITION_POLICY。用户可以在HBase shell创建表时设置此属性。

create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly’}

用户还可以从HBase shell更改现有表的MOB_COMPACT_PARTITION_POLICY。

alter 't1', {NAME => 'f1', MOB_COMPACT_PARTITION_POLICY => 'monthly'}

如果策略从每天更改为每周或每月,或每周更改为每月,则下一个MOB压缩将重新压缩之前策略压缩过的MOB文件。如果策略从每月或每周更改为每天或每月,每周更新已经压缩的MOB文件与以前的策略不会被新策略重新压缩。

 

参考文献:

https://issues.apache.org/jira/browse/HBASE-11339

https://issues.apache.org/jira/browse/HBASE-16981

http://blog.cloudera.com/blog/2015/06/inside-apache-hbases-new-support-for-mobs/

https://blog.cloudera.com/blog/2017/06/introducing-apache-hbase-medium-object-storage-mob-compaction-partition-policies/

https://blog.cloudera.com/blog/2009/02/the-small-files-problem/

http://developer.huawei.com/cn/ict/Products/BigData/FusionInsightHD/HBase/SDK#section-1

https://www.cloudera.com/documentation/enterprise/5-4-x/topics/admin_hbase_mob.html

https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.5.3/bk_data-access/content/ch_MOB-support.html

 

© 著作权归作者所有

jeff-qq
粉丝 2
博文 16
码字总数 15215
作品 0
济南
高级程序员
私信 提问
HBase技术双周刊第1期:HBase 在人工智能场景的使用

精彩直播 HBase多模式 HBase多模式,包括 分析层:支持复杂分析、算子下推;多模式层:提供各种模型转换,贴切业务;索引引擎:提供索引支持,基于 Lucene ;存储引擎:提供 KV 支持,基于L...

萌萌怪兽
2018/11/22
0
0
HBase+Spark技术双周刊第1期

精彩直播 HBase多模式 HBase多模式,包括 分析层:支持复杂分析、算子下推;多模式层:提供各种模型转换,贴切业务;索引引擎:提供索引支持,基于 Lucene ;存储引擎:提供 KV 支持,基于L...

hbase小能手
2018/11/23
0
0
HBase实战之MOB使用指南

若要启用MOB功能,需要在每个RegionServer进行配置,并在建表或者修改表时对指定列族启用MOB特性。在HBase尝鲜版中启用MOB功能,需要由admin用户设置定期进程,以重新优化MOB数据的分布。 增...

HBase技术社区
2018/10/08
0
0
【翻译】Apache Hbase新特性--MOB支持(一)

原文链接:http://blog.cloudera.com/blog/2015/06/inside-apache-hbases-new-support-for-mobs/ HBase MOBs特性的设计背景 Apache HBase is a distributed, scalable, performant, consist......

jeff-qq
2017/10/18
802
0
HBase 实战之 MOB 使用指南

1. 背景 HBase 可以很方便的将图片、文本等文件以二进制的方式进行存储。虽然 HBase 一般可以处理从 1 字节到 10MB 大小的二进制对象,但是 HBase 通常对于读写路径的优化主要是针对小于 10...

hbase小能手
01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

webGL和three.js的关系

本文转载于:专业的前端网站➤webGL和three.js的关系 如今浏览器的功能越来越强大,而且这些功能可能通过JavaScript直接调用。你可以用HTML5标签轻松地添加音频和视频,而且可以在HTML5画布上...

前端老手
11分钟前
3
0
Spring如何实现AOP,请不要再说cglib了!

1. 从注解入手找到对应核心类 最近工作中我都是基于注解实现AOP功能,常用的开启AOP的注解是@EnableAspectJAutoProxy,我们就从它入手。 上面的动图的流程的步骤就是: @EnableAspectJAutoPr...

温安适
14分钟前
13
0
Mybatis之ParameterHandler

mybatis-3.4.6.release. ParementerHandler是个接口,如下List-1 List-1 public interface ParameterHandler { Object getParameterObject(); void setParameters(PreparedStateme......

克虏伯
28分钟前
3
0
Spark sql的批处理物理计划BatchScanExec

BatchScanExec是batch类的物理计划,对应的逻辑计划是DataSourceV2Relation,是Datasource。 它的入参是Scan类,Scan类有两个重要方法,一个获取分区列表信息;另一个方法获取读取器工厂。 ...

守望者之父
32分钟前
10
0
for循环与while循环

循环结构三要素 a. 初始值 b. 循环条件 c. 改变条件 for循环 声明格式 for(表达式1;表达式2;表达式3){ 循环体语句 } 表达式1:用来循环的变量初始值。(开始值) 表达式2:用来判断循环的条件。...

Lenat
37分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部