作家
登录

HBase原理–所有Region切分的细节都在这里了

作者: 来源: 2017-08-29 08:57:37 阅读 我要评论

Region主动切分是HBase可以或许拥有优胜扩大性的最重要身分之一,也必定是所有分布式体系寻求无穷扩大性的一副良药。HBase体系中Region主动切分是若何实现的?这琅绫擎涉及很多常识点,比如Region切分的触发前提是什么?Region切分的切分点在哪里?若何切分才能最大年夜的包管Region的可用性?若何做好切分过程中的异常处理?切分过程中要不要将数据移动?等等,这篇文┞仿将会对这些细节进行根本的解释,一方面可以让大年夜家对HBase中Region主动切分有加倍深刻的懂得,另一方面如不雅想实现类似的功能也可以参考HBase的实现筹划。

Region切分触发策略

在最新稳定版(1.2.6)中,HBase已经有多达6种切分触发策略。当然,每种触发策略都有各自的实用处景,用户可以根据营业在表级别选择不合的切分触发策略。常见的切分策略如下图:

HBase道理–所有Region切分的细节都在这里了

ConstantSizeRegionSplitPolicy:0.94版本前默认切分策略。这是最轻易懂得但也最轻易产生误会的切分策略,大年夜字面意思来看,当region大年夜小大年夜于某个阈值(hbase.hregion.max.filesize)之后就会触发切分,实际上并不是如许,真正实现中这个阈值是对于某个store来说的,即一个region中最大年夜store的大年夜小大年夜于设置阈值之后才会触发切分。别的一个大年夜家比较关怀的问题是这里所说的store大年夜小是紧缩后的文件总大年夜小照样未紧缩文件总大年夜小,实际实现中store大年夜小为紧缩后的文件大年夜小(采取紧缩的场景)。ConstantSizeRegionSplitPolicy相对来来说最轻易想到,然则在临盆线上这种切分策略却竽暌剐相昔时夜的弊病:切分策略对于大年夜表和小表没有明显的区分。阈值(hbase.hregion.max.filesize)设置较大年夜对大年夜表比较友爱,然则小表就有可能不会触发决裂,极端情况下可能就1个,这对营业来说并不是什么功德。如不雅设置较小则对小表友爱,但一个大年夜表就会在全部集群产生大年夜量的region,这对于集群的治理、资本应用、failover来说都不是一件功德。

I ncreasingToUpperBoundRegionSplitPolicy : 0.94版本~2.0版本默认切分策略。这种切分策略微微有些复杂,总体来看和ConstantSizeRegionSplitPolicy思路雷同,一个region中最大年夜store大年夜小大年夜于设置阈值就会触发切分。然则这个阈值并不像ConstantSizeRegionSplitPolicy是一个固定的值,而是会在必定前提下赓续调剂,调剂规矩和region所属表在当前regionserver上的region个数有关系 :(#regions) * (#regions) * (#regions) * flush size * 2,当然阈值并不会无穷增大年夜,最大年夜值为用户设置的MaxRegionFileSize。这种切分策略很好的弥补了ConstantSizeRegionSplitPolicy的短板,可以或许自适应大年夜表和小表。并且在大年夜集群前提下对于很多大年夜表来说表示很优良,但并不完美,这种策略下很多小表会在大年夜集群中产生大年夜量小region,分散在全部集群中。并且在产生region迁徙时也可能会触发region决裂。

别的,还有一些其他决裂策略,比如应用DisableSplitPolicy:可以禁止region产生决裂;而KeyPrefixRegionSplitPolicy,DelimitedKeyPrefixRegionSplitPolicy对于切分策略依然根据默认切分策略,但对于切分点有本身的看法,比如KeyPrefixRegionSplitPolicy请求必须让雷同的PrefixKey待在一个region中。

在用法上,一般情况下应用默认切分策略即可,也可以在cf级别设置region切分策略,敕令为:

  1. create ’table’, {NAME => ‘cf’, SPLIT_POLICY => ‘org.apache.hadoop.hbase.regionserver. ConstantSizeRegionSplitPolicy'} 

Region切分预备工作-寻找SplitPoint

region切分策略会触发region切分,切分开端之后的第一件事是寻找切分点-splitpoint。所有默认切分策略,无论是ConstantSizeRegionSplitPolicy、 IncreasingToUpperBoundRegionSplitPolicy 抑或是SteppingSplitPolicy,对于切分点的定义都是一致的。当然,用户手动履行切分时是可以指定切分点进行切分的,这里并不评论辩论这种情况。

什么情况下会出现没有切分点的场景呢?最常见的就是一个文件只有一个block,履行split的时刻就会发明无法切分。很多新同窗在测试split的时刻往往都是新建一张新表,然后往新表中插入几条数据并履行一下flush,再履行split,事业般地发明数据表并没有真正履行切分。原因就在这里,这个时刻细心的话你翻看debug日记是可以看到如许的日记滴:

HBase道理–所有Region切分的细节都在这里了

Region核心切分流程

8. 开启daughter A、daughter B两个子region。通知修改 hbase.meta 表,正式对外供给办事。

HBase将全部切分过程包装成了一个事务,意图可以或许包管切分事务的原子性。全部决裂事务过程分为三个阶段:prepare – execute – (rollback) ,操作模版如下:

(1)根据reference文件名(region名+真实文件名)定位到真实数据地点文件路径

HBase道理–所有Region切分的细节都在这里了

 1/4    1 2 3 4 下一页 尾页

  推荐阅读

  优化UI界面会惹怒用户?你应该这么做

有时刻在优化UI界面时,会惹怒用户。那么,若何有效的去避免呢,我们来一路看看竽暌剐哪些优化UI界面的办法。以下内容由 Mockplus 团队翻译整顿,仅供进修交换。本地的星巴克可所以一个好>>>详细阅读


本文标题:HBase原理–所有Region切分的细节都在这里了

地址:http://www.17bianji.com/lsqh/36983.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)