阅读 184

HBase实战之MOB使用指南

HBase可以很方便的将图片、文本等文件以二进制的方式进行存储。虽然HBase一般可以处理从1字节到10MB大小的二进制对象,但是HBase通常对于读写路径的优化主要是针对小于100KB的值。当HBase处理数据为100KB~10MB时,由于分裂(split)和压缩(compaction)会引起写的放大,从而会降低HBase性能。所以在HBase2.0+引入了MOB特性,这样保持了HBase的高性能、强一致性和低开销。



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


启用和配置RegionServer上的MOB特性

增加或者修改hbase-site.xml文件中的某些配置

1 设置MOB文件的缓存配置

  <property>

    <name>hbase.mob.file.cache.size</name>

    <value>1000</value>

  </property>

  <property>

    <name>hbase.mob.cache.evict.period</name>

    <value>3600</value>

  </property>

  <property>

    <name>hbase.mob.cache.evict.remain.ratio</name>

    <value>0.5f</value>

   </property>

说明:

1)hbase.mob.file.cache.size 打开的文件句柄缓存数,默认值是1000。通过增加文件句柄数可以提高读的性能,可以减少频繁的打开、关闭文件。若这个值设置过大,会导致“too many opened file handers”。

2)hbase.mob.cache.evict.period  MOB缓存淘汰缓存的MOB文件时间间隔(以秒为单位),默认值为3600秒。

3)hbase.mob.cache.evict.remain.ratio     当缓存的MOB文件数目超过hbase.mob.file.cache.size设置的数目后,会触发MOB缓存淘汰机制(eviction),0.5f为剩余的MOB缓存比率(0~1),默认的比率为0.5f。


2  配置MobMasterObserver作为协处理器的master,主要用于表在删除后,MOB文件的归档。

<property>

<name>hbase.coprocessor.master.classes</name>

<value>org.apache.hadoop.hbase.coprocessor.MobMasterObserver </value>

</property>


MOB的管理

MOB特性为HBase引入新的读写路径,此时我们采用外部工具对其进行优化处理,一个是expiredMobFileCleanerTTL处理TTL和时间的过期数据,另一个是清理工具用来合并小的MOB文件或者多次更新、删除的MOB文件。

  a . 清理过期的MOB数据(expiredMobFileCleaner)

org.apache.hadoop.hbase.mob.compactions.expiredMobFileCleaner tableName familyName

设置清理延时

<property>

<name>hbase.mob.cleaner.delay</name>

<value>60 * 60 * 1000</value>

</property>

 b.  清理工具

org.apache.hadoop.hbase.mob.compactions.Sweeper tableName familyName

属性值设置如下:

  <property>

    <name>hbase.mob.compaction.invalid.file.ratio</name>

    <value>0.3f</value>

  </property>

  <property>

    <name>hbase.mob.compaction.small.file.threshold</name>

    <value>67108864</value>

  </property>

  <property>

    <name>hbase.mob.compaction.memstore.flush.size</name>

    <value>134217728</value>

  </property>

说明:

1)hbase.mob.compaction.invalid.file.ratio 如果在MOB文件中删除了太多的单元格,则被视为作为无效文件,需要重新写入或者合并。当MOB文件(mobFileSize)大小减去存在的单元格(existingCellsSize)大小之差除以MOB文件(mobFileSize)的比率小于设定的值时,我们就认为其为无效文件。默认值为0.3f。

2)hbase.mob.compaction.small.file.threshold 如果MOB的大小小于阈值,则视为小文件,需要合并。默认值为64MB。

3) hbase.mob.compaction.memstore.flush.size  MOB里memstore大小,超过此大小就会flush,并且每个sweep reducer拥有各自memstore。


警告:

使用清理工具最坏的情况:MOB文件压缩合并成功,但是相关的(put)更新失败。这意味着新的MOB文件已经创建但未能将新的MOB文件路径存入HBase中,因此HBase不会指向这些MOB文件。


小贴士:请检查yarn-site.xml的配置,在yarn.application.classpath中添加hbase的安装路径: $HBASE_HOME/* 和hbase的lib路径$HBASE_HOME/lib/*

  <property>
    <description>Classpath for typical applications.</description>
     <name>yarn.application.classpath</name>
     <value>

      $HADOOP_CONF_DIR

        $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*

        $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,

        $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*

        $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/* 

       $HBASE_HOME/*, $HBASE_HOME/lib/*

 </value>
  </property>


在表中开启MOB特性

a 将列族设置为MOB

HColumnDescriptor hcd = new HColumnDescriptor(“f”);

hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));

b 设置MOB单元格的阈值,默认为102400

HColumnDescriptor hcd;

hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(102400L);

对于客户端而言,MOB单元格操作和普通单元格类似。

c 插入MOB值

KeyValue kv = new KeyValue(row1, family, qf1, ts, KeyValue.Type.Put, value );

Put put = new Put(row1);

put.add(kv);

region.put(put);

d 获取MOB值

Scan scan = new Scan();

InternalScanner scanner = (InternalScanner) region.getScanner(scan);

scanner.next(result, limit);

e 获取MOB 所有数据(raw =true)

Scan scan = new Scan();

scan.setAttribute(MobConstants.MOB_SCAN_RAW, Bytes.toBytes(Boolean.TRUE));

InternalScanner scanner = (InternalScanner) region.getScanner(scan);

scanner.next(result, limit);


运行一个MOB示例

sudo -u hbase hbase org.apache.hadoop.hbase.IntegrationTestIngestMOB


本文虽多次斟酌,但由于译者水平有限,有翻译不当之处还请大家多多指出,互相学习,若阅读原版可以点击阅读原文

相关阅读

HBase MOB压缩分区策略介绍




图片


©著作权归作者所有:来自51CTO博客作者mb5fdb0a6739180的原创作品,如需转载,请注明出处,否则将追究法律责任


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐