HBase 0.94中的Split策略
来源:互联网 发布:淘宝店铺装修布局设计 编辑:程序博客网 时间:2024/05/24 06:31
HBase 0.94之前版本中,split使用的是ConstantSizeRegionSplitPolicy。当region中文件大小超过配置中所指定大小时,会进行切分。
而在0.94版本之后,默认split策略修改为了IncreasingToUpperBoundRegionSplitPolicy。该策略使用了另一种方法来计算是否应当切割,导致原先的参数失效。
该方法中的分配策略,是根据table中region的个数平方,乘以memstore的大小。得出应当切分的大小。
假设memstore size配置为128M,则在memstore第一次刷入HFile数据时,进行第一次split,1 * 1 * 128M = 128M。
当region数达到2个时,2 * 2 * 128M = 512M。
当region数达到3个时,3 * 3 * 128M = 1152M。
依此类推。
当region个数到达30个时,30 * 30 * 128 = 107648M = 105.1G。即在此时,region的切分大小已经超过了我们原先在ConstantSizeRegionSplitPolicy策略中设置的100G大小。
简单分析
对这种策略进行简单的分析,可以看到,在数据写入初期,这种策略可以快速的对现有region进行split,使得在一开始就可以将热点region切分到多个server上。同时由于region size较小,也可以避免split操作对写入的阻塞。
而在后期,当region数量逐渐增多,单个region size逐渐增大时,split频率会急速减少,避免在region过大时频繁split的情况。
这种策略一方面在数据量增大的情况下减少了region的切分次数,达到了我们期望的尽量减少split的需求,避免对写入造成影响。同时在初期的快速切分,在基本不影响写入的同时,也减少了我们原先需要手动操作split的问题。可以认为,这种策略是符合我们需求的。当然,还需要进一步的测试来进行验证。
源码
源码如下:
/** * @return Region max size or <code>count of regions squared * flushsize, which ever is * smaller; guard against there being zero regions on this server. */long getSizeToCheck(final int tableRegionsCount) { return tableRegionsCount == 0? getDesiredMaxFileSize(): Math.min(getDesiredMaxFileSize(), this.flushSize * (tableRegionsCount * tableRegionsCount));} @Overrideprotected boolean shouldSplit() { if (region.shouldForceSplit()) return true; boolean foundABigStore = false; // Get count of regions that have the same common table as this.region int tableRegionsCount = getCountOfCommonTableRegions(); // Get size to check long sizeToCheck = getSizeToCheck(tableRegionsCount); for (Store store : region.getStores().values()) { // If any of the stores is unable to split (eg they contain reference files) // then don't split if ((!store.canSplit())) { return false; } // Mark if any store is big enough long size = store.getSize(); if (size > sizeToCheck) { LOG.debug("ShouldSplit because " + store.getColumnFamilyName() + " size=" + size + ", sizeToCheck=" + sizeToCheck + ", regionsWithCommonTable=" + tableRegionsCount); foundABigStore = true; break; } } return foundABigStore;}
可详见:
http://hbase.apache.org/0.94/xref/org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.html
- HBase 0.94中的Split策略
- hbase region split策略
- HBase Region split 策略
- hbase split策略
- HBase 1.1.2 split 策略
- HBASE-region的SPLIT策略
- hbase Region split policy 分区 分裂策略 算法
- HBase Split
- HBase split
- HBase Split
- HBase Split
- HBase-split
- hbase split
- HBase 0.94.8 split 源码分析
- HBASE中的compaction策略,日期分层
- HBase最佳实践-HBase中的读性能优化策略
- HBase最佳实践-HBase中的写性能优化策略
- HBase最佳实践-HBase中的写性能优化策略
- centos配置防火墙 开启80端口
- tempest 配置文件
- 设置STS、ECLIPSE、myeclipse打开java源码乱码问题
- 实例讲解如何在iOS应用开发中使用设计模式中的代理模式
- 【Android】自定义ProgressBar,SeekBar
- HBase 0.94中的Split策略
- find和xargs
- LabVIEW中实现链表、树等数据结构
- 2014年山东省第五届ACM大学生程序设计竞赛--Hearthstone II(第一类Stirling数)
- android中图片规格
- 内核时间子系统的配置
- FZU 2230 翻翻棋 (找规律 水题)
- Python简介
- hjr教程-汇编(一):地址与数据