问题导读
1.而在0.94版本之后,默认split策略修改为了什么?
2.这种策略有什么好处?
HBase 0.94中的Split策略
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));
- }
-
- @Override
- protected 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;
- }
分享到:
相关推荐
hbase0.94java源代码 希望对大家有帮助
文件包括 hadoop1.0.2安装 编译hadoop-eclipse插件 MapReduce开发 hbase0.94安装
从官网api中经处理后生成的一个离线版本,解压后,点击index.html即可使用。
NULL 博文链接:https://winseclone.iteye.com/blog/1734818
使用github中最新的nutch-2.x源码,奋战10天拿下的Hadoop-2.4.0+Hbase-0.94.18+Nutch-2.3配置攻略,在ubuntu14.04上成功运行本地和分布式爬虫。文档详细描述了三者版本不兼容问题的解决方案以及各个配置文件的详细...
HBase api
介绍如何hbase-0.94.1手动进行数据迁移
HBase写性能优化策略HBase写性能优化策略HBase写性能优化策略
官方网站上已经绝版的 hbase-0.94.18,限量发行。
文档详细介绍了在hadoop安装hbase的详细步骤
HBase 0.94.4.tar.gz,官网上只有新版本,0.94.4稳定版本,请下载使用。
hbase-0.94.13.rar 包括jar包和源码,需要的就用吧
企业内部实际 hadoop zookeeper hbase搭建步骤明细
hbase-0.94.27.tar.gz
本书以HBase0.94为基础,不仅深入探讨HBase的原理框架和数据模型,更重要的是通过实际案例教诲读者如何运用HBase框架来设计、搭建及运行大数据系统,同时结合生产案例剖析HBase系统运维和性能调优的技巧。
当前状态:完全通过 HBase 0.94 和 0.94.16Java hbase-client支持 HBase 服务器的版本[√] 0.94.x[√] 0.94.0[√] 0.94.160.95.x0.96.x安装$ npm install hbase-client使用 CRUD:通过 zookeeper 创建 HBase ...
为解决现有的HBase数据压缩策略选择方法未考虑数据的冷热性,以及在选择过程中存在片面性和不可靠性的缺陷,提出了基于HBase数据分类的压缩策略选择方法。依据数据文件的访问频度将HBase数据划分为冷热数据,并限定具体...
HBase的region split策略一共有以下几种: 1、ConstantSizeRegionSplitPolicy 0.94版本前默认切分策略 当region大小大于某个阈值(hbase.hregion.max.filesize=10G)之后就会触发切分,一个region等分为2个region。 ...
ella-hbase-0.96.2 根据ella hbase-0.94修改,取消部分jmx数据获取方式,使用标准hbase java api进行数据获取. 源码来自
MapReduce生成HFile入库到HBase 可能需要的jar包,一共有3个 可以直接放在每台机器的${HADOOP_HOME}/lib下 hadoopHadoop 1.1.2 + hbase 0.94.6.1