专栏首页大数据和云计算技术HBase 的MOB压缩分区策略介绍

HBase 的MOB压缩分区策略介绍

HBase应用场景非常广泛;社区前面有一系列文章。大家可以到社区看看看;张少华同学本篇主要讲HBase的MOB压缩分区策略介绍,非常赞!大力推荐!

社区系列文章:

新数仓系列:HBase关键能力和特性梳理

HBase 和 Cassandra的浅谈

新数仓系列:Hbase周边生态梳理(1)

HBase设计之rowkey设计


介绍

HBase中等对象(MOB---MediumObject)存储特性引入是源自社区HBASE-11339。对于中等大小的文档、图像等文件的存储(文件大小从100K到10MB),可降低读取延迟和写入访问时间[1]。通过分离文件的IO路径和MOB文件对象,对文件采取不同的压缩策略,从而减少由于HBase压缩造成的写入扩大。若一个表的MOB文件存储在MOB区域(MOB region)中,则意味着该区域中将存在大量的MOB文件。请参考下图中HBase MOB架构。

MOB体系结构

从上图我们可以看出MOB文件相对较小(小于1或者2个HDFS块)。为了提高HDFS的效率,通过MOB压缩方法将MOB文件定期合并为较大的文件,并且这种压缩方法与正常的压缩过程相互独立。MOB压缩最初是将当天多个MOB文件合并为较大的MOB文件。通过下面示例我们可以更清楚了解这一过程。表t1有两个两个分区(r1,r2),一个列族f1,并且启用了MOB功能。你可以看到如下两个前缀:

D279186428a75016b17e4df5ea43d080 对应分区r1中startkey的散列值

D41d8cd98f00b204e9800998ecf8427e 对应分区r2中startkey的散列值

在MOB区域中,从2016.1.1-2016.1.2,r1分区中每天有两个MOB文件,2016.1.1当天,分区r2中有三个MOB文件

通过MOB压缩后,r1、r2分区中同一日期的文件合并为一个文件,如下:

由于只有在同一区并且为同一天的MOB文件才可压缩,因此在一个MOB区域中的目录下一年产生的MOB文件数量为365乘以分区数目。若有1000个分区,通过MOB压缩,10年后将会有365 x 1000 x 10,3.65(百万)个文件产生并且文件数量会一直增长。但是,由于HDFS中一个目录下文件存储受限[2],若MOB文件数超过HDFS限制后,MOB表将不再可写入文件。HDFS的一个目录下默认的最大文件数为100万,那么对于1000个分区来说,文件存储数目将在3年左右达到这个极限值。分区越多,最大文件数会越快达到这个极限。

从HBASE-16981引入按周和月的MOB压缩分区策略,对此MOB文件存放比例相应提高了7%和30%。

HBASE-16981基本思路是将一周或者一个月的MOB文件压缩合并为更大的文件。根据ISO8601定义的周(起始为周一结束为周日),若采用周策略进行MOB压缩后,则每个分区每周会产生一个文件,同理,用压缩方法按月压缩,每月会生成一个文件,最终在一个MOB区域目录下的文件数分别为52 乘以分区数和12乘以分区数。这样就大大减少了压缩后MOB文件的数量。

最初的方法

根据MOB压缩发生的频率,文件可能多次被压缩。例如,第一天所有的MOB文件被压缩为一个文件,第二天将第一天和第二天的MOB文件压缩为一个新的文件,第三天将第二天和第三天产生的文件压缩为一个新文件,以此类推,一个月后,第1天的文件压缩会超过30次,因此也就将写的IO数量扩大了30倍以上。

HBase MOB的设计目标是减少由于MOB压缩而导致的写入扩大。上述的这种方法没能达到设计目标。

最终的方法

为了克服最初提出方案的不足,在HBASE-16981中采用了新的按周和月压缩策略。图2展示了如何按月压缩策略,同时按周压缩策略与此类似。

图2 按月MOB压缩策略

图2所示的MOB压缩发生在2016.11.15。根据配置的MOB阈值,每日分区中的文件按周进行压缩。上图中11.14和11.15的两天的文件各自压缩。当前月份(11月)中过去的几周的文件基于每周阈值分区进行压缩(MOB阈值 x 7),如11.1-11.6和11.7-11.13的文件分别压缩。11月之前的文件按月进行压缩,例如10.1-10.31文件压缩在一起。需要注意的是11月的第一周是从10.31-11.6结束。由于2016.10.31是10月的最后一天,因此当天的文件压缩是按照月分区进行压缩,这样11月的第一周压缩的天数只剩下6天(11.1-11.6),如果MOB压缩阈值和压缩大小设置合理,那么第一周会有5个压缩文件。

通过这种设计模式,MOB文件可以通过2个阶段或3个阶段完成压缩。在每个阶段,日、周、月分区都会随着MOB压缩阈值的增加而变化。通常情况下,MOB文件按月最多3次压缩,按周最多压缩2次。具体的设计细节可以参考[3]。

用法

在默认情况下,MOB压缩分区策略是每日一次。若要用周或月策略,可以在MOB列族中添加了一个新属性字段:MOB_COMPACT_PARTITION_POLICY。用户可通过HBase shell在创建表时设置该属性。例如:

同时也可以改变该属性字段值

如果压缩策略从每日改为每周或每月,或从每周改为每月,则下一个MOB压缩将重新压缩之前压缩的MOB文件。如果策略从每月或每周改为每日或每月更新,则对已使用先前策略压缩的MOB文件将不会与新策略再次执行压缩。

结束语

HBASE-16981解决了文件数大量增加的问题,并在Apache HBase 2.0.0版本中使用。CDH的CDH5.4.0+及以后的版本开始使用HBase MOB特性,其中从5.11.0开始使用HBASE-16981修复的版本。

由于译者水平有限,有翻译不当之处还请大大家多多指出,互相学习。

参考

[1]https://blog.cloudera.com/blog/2015/06/inside-apache-hbases-new-support-for-MOBs/

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

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

原文地址:http://blog.cloudera.com/blog/2017/06/introducing-apache-hbase-medium-object-storage-MOB-compaction-partition-policies/#/

本文分享自微信公众号 - 大数据和云计算技术(jiezhu2007),作者:张少华

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • hdfs auditlog(审计日志)

    hdfs审计日志(Auditlog)记录了用户针对hdfs的所有操作,详细信息包括操作成功与否、用户名称、客户机地址、操作命令、操作的目录等。对于用户的每一个...

    大数据和云计算技术
  • 同态加密技术

    最近领导安排研究下大数据的安全,计算机安全是个系统工程,分很多层面: 1)硬件安全 2)应用软件安全 3)操作系统安全 4)数据库系统安全 5)网络安全技术 涉...

    大数据和云计算技术
  • 大数据和云计算技术周报(第36期):NoSQL特辑

    本期有 HBase入门、HBase集群监控、Kudu vs HBase、Flush与Compaction、MySQL索引优化、Redis 分布式锁。 希望大家会...

    大数据和云计算技术
  • NDK--文件的拆分和合并

    aruba
  • 监控工具 Nagios

    监控的本质就是收集获取软硬件资源的状态信息,例如 CPU 的使用率、内存空间、磁盘余量、WEB服务可达状态……,然后分析各部分是否工作正常,当发现某个地方异常时...

    dys
  • Java核心(五)深入理解BIO、NIO、AIO

    导读:本文你将获取到:同/异步 + 阻/非阻塞的性能区别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路复用;同时掌握 IO ...

    Java中文社群_老王
  • 协议-应用层的协议分类

    1.超文本传输协议HTTP:  这是一种最基本的客户机/服务器的访问协议。浏览器向服务器发送请求,而服务器回应相应的网页。 

    秋日芒草
  • Java核心(五)深入理解BIO、NIO、AIO

    导读:本文你将获取到:同/异步 + 阻/非阻塞的性能区别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路复用;同时掌握 IO ...

    Java中文社群_老王
  • Android NDK OpenCV级联方式实时进行人脸检测

    前面的文章《Android通过OpenCV和TesserartOCR实时进行识别》我们已经搭好一个利用NDK方式实时处理摄像头数据的程序了,今天我们就在看看Op...

    Vaccae
  • GDB入门教程

    GDB(The GNU Debugger),是GNU开源组织发布的一个强大的UNIX程序调试工具。如果你是在 UNIX平台下开发软件,你会发现GDB这个调试工具...

    Dabelv

扫码关注云+社区

领取腾讯云代金券