HBase 的MOB压缩分区策略介绍
HBase应用场景很广泛。社区前面有一系列文章。
大家能够到社区看看看。张少华同学本篇主要讲HBase的MOB压缩分区策略介绍,很赞。大力推荐!
社区系列文章:
介绍
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压缩分区策略介绍的更多相关文章
- 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 ...
- hbase实战——(1.1 nosql介绍)
什么是nosql NoSQL(NoSQL = Not Only SQL),意思是不仅仅是SQL的扩展,一般指的是非关系型的数据库. 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0 ...
- cassandra框架模型之一——Colum排序,分区策略 Token,Partitioner bloom-filter,HASH
转自:http://asyty.iteye.com/blog/1202072 一.Cassandra框架二.Cassandra数据模型 Colum / Colum Family, SuperColum ...
- GC之一--GC 的算法分析、垃圾收集器、内存分配策略介绍
一.概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本 ...
- hbase开放lzo压缩
hbase仅仅支持对gzip的压缩,对lzo压缩支持不好. 在io成为系统瓶颈的情况下,一般开启lzo压缩会提高系统的吞吐量. 但这须要參考详细的应用场景,即是否值得进行压缩.压缩率是否足够等等. ...
- Linux内核策略介绍
Linux内核策略介绍学习笔记 主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发 ...
- HBase在HDFS上的目录介绍
总所周知,HBase 是天生就是架设在 HDFS 上,在这个分布式文件系统中,HBase 是怎么去构建自己的目录树的呢? 第一,介绍系统级别的目录树. 一.0.94-cdh4.2.1版本 系统级别的一 ...
- 对已经存在的hbase表修改压缩方式
业务上可能会遇到这种情况,在最初创建hbase表时候,未指定压缩方式,当数据导入之后,由rowkey带来的数据膨胀导致hdfs上的数据大小远远大于原始数据大小.所以这时候可能就不得不考虑使用压缩,但是 ...
- Spark GraphX图算法应用【分区策略、PageRank、ConnectedComponents,TriangleCount】
一.分区策略 GraphX采用顶点分割的方式进行分布式图分区.GraphX不会沿着边划分图形,而是沿着顶点划分图形,这可以减少通信和存储的开销.从逻辑上讲,这对应于为机器分配边并允许顶点跨越多台机器. ...
随机推荐
- 2 salt-masterless架构
minion无master的使用用法 需要更改minion配置文件的三个配置项 [root@linux-node2 ~]# vim /etc/salt/minion file_client: loca ...
- 使用UWA GOT优化Unity性能和内存
优化百科: https://blog.uwa4d.com/archives/Index.html https://blog.uwa4d.com/archives/Introduction_UWAGOT ...
- java.util.Stack(栈)的简单使用
import java.util.Stack; import org.junit.Before; import org.junit.Test; /** * Stack(栈)继承了Vector类,底层实 ...
- VS2017 配置ImageMagick
以下配置仅供参考,我配置完了怎样都用不了... 直接下载源码使用VS进行编译. 源码下载地址:http://imagemagick.org/script/install-source.php#wind ...
- 【typecho】解决使用分隔符 <!--more-->标签后首页文字下面出现一段空白
使用typecho 搭建了一个站点,输出摘要时候.使用了 <!--more--> 分隔符,然后首页文章出现了一大片空白,审查元素发现.多了好多 <br> 标签 解决办法: ...
- c# 日期函数DateTime.ToString()日期的各种格式 (本人亲测)
c# 日期函数DateTime.ToString()日期的各种格式 (本人亲测) 平时写代码的过程难免遇到对日期的格式转换,这个时候很容易忘记具体格式的转换是什么,当然这不是什么复杂的,查一下就能找 ...
- 英文写作强调技巧:alliteration, assonance, consonance
alliteration 安排两个以上首字母相同的词相邻 例: The bouncing ball went high into the sky. (In this example, the &quo ...
- Oracle数据库入门——目录结构
一.Oracle_Home目录 Oracle_Home主目录位于D:\dev\oracle\product\10.2.0(oracle安装路径)下,它包含Oracle软件运行有关的子目录和网络文件以及 ...
- flask下载文件中文IE,Edge,Safari文件名乱码
flask(0.11.2)+python3.6 兼容各个主流浏览器,已经过各种测试(chrome,firefox,safari,IE,Edge) quote是将文件名urlencode化,然后以适应E ...
- js中if语句的几种优化代码写法
UglifyJS是一个对javascript进行压缩和美化的工具,在它的文档说明中,我看到了几种关于if语句优化的方法. 一.使用常见的三元操作符 复制代码 代码如下: if (foo) bar(); ...