威凡网全力打造:网页编程、软件开发编程、平面设计、服务器端开发、操作系统等在线学习平台!学编程,上威凡网!
PHP教程>> PHP基础 PHP技巧 PHP实例 PHP文摘 PHP模板 PHP总结
当前位置:首页 > PHP教程 > PHP总结
上一节 下一节
 HBase新特性—StripeCompaction

借鉴于leveldb、cassandra的compaction方法,https://issues.apache.org/jira/browse/hbase-7667 提出了stripe compaction的方法。 motivation: 1)过多region会增大rs维护的开销,降低rs的读写性能。随着数据量的增大,在一定程度上增加region个数,会提高

借鉴于leveldb、cassandra的compaction方法,https://issues.apache.org/jira/browse/hbase-7667 提出了stripe compaction的方法。

motivation:
1)过多region会增大rs维护的开销,降低rs的读写性能。随着数据量的增大,在一定程度上增加region个数,会提高系统的吞吐率。然而,rs上服务的region个数增多,增加了rs下内存维护的开销,尤其每个store下都配置有一个memstore,从而会造成频率更高的flush操作,影响系统的读写性能。因此,如果能够提出更轻量级的mini-region,不仅能够降低服务多个region的开销,而且能够提升读写数据的效率。

2) region compaction容易”放大”。例如,region区间为[1fff,2fff),在该区间内仅有[1fff,21ff)区间有大量的写操作(put、delete),但是,在触及majorcompaction条件时,却需要对所有的文件执行major compaction,从而引起大量的io。

3) region split操作代价较大。

需要了解之前hbase的compaction与flush过程,可以参考:hbasecompaction机制 以及 hbase flush对读写的影响

stripe-compaction设计的核心思想:
1)对于region下的rowkey区间进行二次切分,例如[1fff,2fff),切分成[1fff,24ff),[24ff,2fff)两个区间,每个区间成为stripe。
2)region下的数据文件分为level-0和level-1两层。其中level-0主要用来存储临时的数据文件(例如使用bulkload或者执行mem flush操作之后的数据), level-1层的数据是按照stripe的分区来区分。
3)支持两种方式的配置:mini-regions的个数设置、或者以size-based为大小触发因子的自动切分机制。
4)容错机制。如果在stripes之间存在空洞。那么可以根据在store当中的设置,将所有的处于level-1层的文件回归到level-0重新进行compaction。
5)get操作时,一个row所涉及到文件有:memstore、level-0下所有文件、以及level-1下对应stripe区下的文件。根据stack的意见,最终level-0下的文件只是一个暂时的状态,大部分文件都位于level-1 stripe下,因此,这样随机读时,需要涉及到的文件更聚集。
6)scan操作时,需要定位startrow即可。在扫描过程中,会按照stripe的row区间的排序,依次进行。
7)compaction,是level-0上升到level-1的过程,同时,在level-1层次的数据,也会进行相关的合并。
8)在split操作时,定位rowkey区间的中心点,可以根据stripe记录的位置,进一步查找,因此,使用预置的stripe会有利于split操作的进行,可以实现多数hfile文件直接拷贝到子region目录,从而加快了split操作的效率。

下面对于cassandra以及leveldb中使用的多层次compaction算法做一个介绍。

1)分层式压缩方式将数据分成条个层,最底层的叫l0,其上分别是l1,l2….,每一层的数据大小是其上的那一层数据最大大小的10倍,其中最底层l0的大小为5m (可以配置)
2) 当level层次大于0时,同一层的各个文件之间的rowkey区间不会重叠。所以在level n与level n+1的数据块进行合并时,可以明确的知道某个key值处在哪个数据块中,可以一个数据块一个数据块的合并,合并后生成新块就丢掉老块。不用一直到所有合并完成后才能删除老的块。
3)整体执行流程是从l0->l1->l2,依次合并的过程,如下图所示。

由上图,我们可以得知,越是level较低的块,它的数据就越新,在满足向下归约合并的过程中,就会按照文件的rowkey的区间,进行合并,去除多余的版本,或者执行相关删除操作。因此,在读请求最极端的情况下,从level0开始读数据,一直读到最下层level n。

这种compaction的优势在于:
1)大部分的读操作如果有lru特性,都会落入较低的level上。因此,数据越"热",level就越低。从而有利于未来hfile多种存储介质的定位问题。
2)在合并的过程中,仅需在由上到下的部分文件参与,而不是要对所有文件执行compaction操作。这样会加快compaction执行的效率。

劣势在于,如果层次太多,在递归合并的过程中,容易造成某个区间的compaction风暴,影响该区间数据操作的吞吐。
因此,hbase-stripe compaction的方案中,只有两层,level 0和level1,这种方法在保留分层压缩的优势的同时,降低了总文件个数,有利于rs执行split、merge等操作。


申明:本教程内容由威凡网编辑整理并提供IT程序员分享学习,如文中有侵权行为,请与站长联系(QQ:254677821)!
上一节 下一节
相关教程  
其他教程  
PHP基础
PHP技巧
PHP实例
PHP文摘
PHP模板
PHP总结

违法和不良信息举报中心】邮箱:254677821@qq.com
Copyright©威凡网 版权所有 苏ICP备2023020142号
站长QQ:254677821