版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/zNZQhb07Nr/article/details/79832392

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修复的版本号。

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

HBase 的MOB压缩分区策略介绍的更多相关文章

  1. DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器

    DART: a fast and accurate RNA-seq mapper with a partitioning strategyDART:使用分区策略的快速准确的RNA-seq映射器 Abs ...

  2. hbase实战——(1.1 nosql介绍)

    什么是nosql NoSQL(NoSQL = Not Only SQL),意思是不仅仅是SQL的扩展,一般指的是非关系型的数据库. 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0 ...

  3. cassandra框架模型之一——Colum排序,分区策略 Token,Partitioner bloom-filter,HASH

    转自:http://asyty.iteye.com/blog/1202072 一.Cassandra框架二.Cassandra数据模型 Colum / Colum Family, SuperColum ...

  4. GC之一--GC 的算法分析、垃圾收集器、内存分配策略介绍

    一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...

  5. hbase开放lzo压缩

    hbase仅仅支持对gzip的压缩,对lzo压缩支持不好. 在io成为系统瓶颈的情况下,一般开启lzo压缩会提高系统的吞吐量. 但这须要參考详细的应用场景,即是否值得进行压缩.压缩率是否足够等等.  ...

  6. Linux内核策略介绍

      Linux内核策略介绍学习笔记   主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发 ...

  7. HBase在HDFS上的目录介绍

    总所周知,HBase 是天生就是架设在 HDFS 上,在这个分布式文件系统中,HBase 是怎么去构建自己的目录树的呢? 第一,介绍系统级别的目录树. 一.0.94-cdh4.2.1版本 系统级别的一 ...

  8. 对已经存在的hbase表修改压缩方式

    业务上可能会遇到这种情况,在最初创建hbase表时候,未指定压缩方式,当数据导入之后,由rowkey带来的数据膨胀导致hdfs上的数据大小远远大于原始数据大小.所以这时候可能就不得不考虑使用压缩,但是 ...

  9. Spark GraphX图算法应用【分区策略、PageRank、ConnectedComponents,TriangleCount】

    一.分区策略 GraphX采用顶点分割的方式进行分布式图分区.GraphX不会沿着边划分图形,而是沿着顶点划分图形,这可以减少通信和存储的开销.从逻辑上讲,这对应于为机器分配边并允许顶点跨越多台机器. ...

随机推荐

  1. 2 salt-masterless架构

    minion无master的使用用法 需要更改minion配置文件的三个配置项 [root@linux-node2 ~]# vim /etc/salt/minion file_client: loca ...

  2. 使用UWA GOT优化Unity性能和内存

    优化百科: https://blog.uwa4d.com/archives/Index.html https://blog.uwa4d.com/archives/Introduction_UWAGOT ...

  3. java.util.Stack(栈)的简单使用

    import java.util.Stack; import org.junit.Before; import org.junit.Test; /** * Stack(栈)继承了Vector类,底层实 ...

  4. VS2017 配置ImageMagick

    以下配置仅供参考,我配置完了怎样都用不了... 直接下载源码使用VS进行编译. 源码下载地址:http://imagemagick.org/script/install-source.php#wind ...

  5. 【typecho】解决使用分隔符 <!--more-->标签后首页文字下面出现一段空白

    使用typecho 搭建了一个站点,输出摘要时候.使用了   <!--more-->  分隔符,然后首页文章出现了一大片空白,审查元素发现.多了好多 <br> 标签 解决办法: ...

  6. c# 日期函数DateTime.ToString()日期的各种格式 (本人亲测)

    c# 日期函数DateTime.ToString()日期的各种格式  (本人亲测) 平时写代码的过程难免遇到对日期的格式转换,这个时候很容易忘记具体格式的转换是什么,当然这不是什么复杂的,查一下就能找 ...

  7. 英文写作强调技巧:alliteration, assonance, consonance

    alliteration 安排两个以上首字母相同的词相邻 例: The bouncing ball went high into the sky. (In this example, the &quo ...

  8. Oracle数据库入门——目录结构

    一.Oracle_Home目录 Oracle_Home主目录位于D:\dev\oracle\product\10.2.0(oracle安装路径)下,它包含Oracle软件运行有关的子目录和网络文件以及 ...

  9. flask下载文件中文IE,Edge,Safari文件名乱码

    flask(0.11.2)+python3.6 兼容各个主流浏览器,已经过各种测试(chrome,firefox,safari,IE,Edge) quote是将文件名urlencode化,然后以适应E ...

  10. js中if语句的几种优化代码写法

    UglifyJS是一个对javascript进行压缩和美化的工具,在它的文档说明中,我看到了几种关于if语句优化的方法. 一.使用常见的三元操作符 复制代码 代码如下: if (foo) bar(); ...