开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散

Region主动切分是HBase可以或许拥有优胜扩大性的最重要身分之一,也必定是所有分布式体系寻求无穷扩大性的一副良药。HBase体系中Region主动切分是若何实现的,这琅绫擎涉及很多常识点,比如Region切分的触发前提是什么、Region切分的切分点在哪里、若何切分才能最大年夜的包管Region的可用性、若何做好切分过程中的异常处理、切分过程中要不要将数据移动等,这篇文┞仿将会对这些细节进行根本的解释,一方面可以让大年夜家对HBase中Region主动切分有加倍深刻的懂得,另一方面如不雅想实现类似的功能也可以参考HBase的实现筹划。
Region切分触发策略
在最新稳定版(1.2.6)中,HBase已经有多达6种切分触发策略。当然,每种触发策略都有各自的实用处景,用户可以根据营业在表级别选择不合的切分触发策略。常见的切分策略如下图:

ConstantSizeRegionSplitPolicy:0.94版本前默认切分策略。这是最轻易懂得但也最轻易产生误会的切分策略,大年夜字面意思来看,当region大年夜小大年夜于某个阈值(hbase.hregion.max.filesize)之后就会触发切分,实际上并不是如许,真正实现中这个阈值是对于某个store来说的,即一个region中最大年夜store的大年夜小大年夜于设置阈值之后才会触发切分。
8. 开启daughter A、daughter B两个子region。通知修改 hbase.meta 表,正式对外供给办事。
别的一个大年夜家比较关怀的问题是这里所说的store大年夜小是紧缩后的文件总大年夜小照样未紧缩文件总大年夜小,实际实现中store大年夜小为紧缩后的文件大年夜小(采取紧缩的场景)。ConstantSizeRegionSplitPolicy相对来来说最轻易想到,然则在临盆线上这种切分策略却竽暌剐相昔时夜的弊病:切分策略对于大年夜表和小表没有明显的区分。阈值(hbase.hregion.max.filesize)设置较大年夜对大年夜表比较友爱,然则小表就有可能不会触发决裂,极端情况下可能就1个,这对营业来说并不是什么功德。如不雅设置较小则对小表友爱,但一个大年夜表就会在全部集群产生大年夜量的region,这对于集群的治理、资本应用、failover来说都不是一件功德。
3. 父region什么时刻会被删除?
IncreasingToUpperBoundRegionSplitPolicy: 0.94版本~2.0版本默认切分策略。这种切分策略微微有些复杂,总体来看和ConstantSizeRegionSplitPolicy思路雷同,一个region中最大年夜store大年夜小大年夜于设置阈值就会触发切分。然则这个阈值并不像ConstantSizeRegionSplitPolicy是一个固定的值,而是会在必定前提下赓续调剂,调剂规矩和region所属表在当前regionserver上的region个数有关系 :(#regions) * (#regions) * (#regions) * flush size * 2,当然阈值并不会无穷增大年夜,最大年夜值为用户设置的MaxRegionFileSize。
这种切分策略很好地弥补了ConstantSizeRegionSplitPolicy的短板,可以或许自适应大年夜表和小表。并且在大年夜集群前提下对于很多大年夜表来说表示很优良,但并不完美,这种策略下很多小表会在大年夜集群中产生大年夜量小region,分散在全部集群中。并且在产生region迁徙时也可能会触发region决裂。
SteppingSplitPolicy: 2.0版本默认切分策略。这种切分策略的切分阈值又产生了变更,比拟IncreasingToUpperBoundRegionSplitPolicy简单了一些,依然和待决裂region所属表在当前regionserver上的region个数有关系,如不雅region个数等于1,切分阈值为flush size * 2,不然为MaxRegionFileSize。这种切分策略对于大年夜集群中的大年夜表、小表会比IncreasingToUpperBoundRegionSplitPolicy加倍友爱,小表不会再产生大年夜量的小region,而是适可而止。
别的,还有一些其它决裂策略,比如应用DisableSplitPolicy:可以禁止region产生决裂;而KeyPrefixRegionSplitPolicy,DelimitedKeyPrefixRegionSplitPolicy对于切分策略依然根据默认切分策略,但对于切分点有本身的看法,比如KeyPrefixRegionSplitPolicy请求必须让雷同的PrefixKey待在一个region中。
- create ’table’, {NAME => ‘cf’, SPLIT_POLICY => ‘org.apache.hadoop.hbase.regionserver. ConstantSizeRegionSplitPolicy'}
Region切分预备工作:寻找Splitpoint
那切分点是若何定位呢?全部region中最大年夜store中的最大年夜文件中最中间的一个block的首个rowkey。这是一句比较消费脑力的语句,须要细细咀嚼。别的,HBase还规定,如不雅定位到的rowkey是全部文件的首个rowkey或者最后一个rowkey的话,就认为没有切分点。
region切分策略会触发region切分,切分开端之后的第一件事是寻找切分点-splitpoint。所有默认切分策略,无论是ConstantSizeRegionSplitPolicy、IncreasingToUpperBoundRegionSplitPolicy抑或是SteppingSplitPolicy,对于切分点的定义都是一致的。当然,用户手动履行切分时是可以指定切分点进行切分的,这里并不评论辩论这种情况。
什么情况下会出现没有切分点的场景呢?最常见的就是一个文件只有一个block,履行split的时刻就会发明无法切分。很多新同窗在测试split的时刻往往都是新建一张新表,然后往新表中插入几条数据并履行一下flush,再履行split,事业般地发明数据表并没有真正履行切分。原因就在这里,这个时刻细心的话你翻看debug日记是可以看到如许的日记滴:
推荐阅读
500元的ThinkPad电脑(图片截自58同城) 开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 很多玩家对主机的机能寻求都是越高越好,当然,主机机能越强就可以加倍高效地完成义务,对>>>详细阅读
本文标题:HBase Region自动切分的所有细节都在这里了
地址:http://www.17bianji.com/lsqh/39600.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示