`
zhangxiong0301
  • 浏览: 359904 次
社区版块
存档分类
最新评论

hbase0.94之后split策略

阅读更多

问题导读

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的问题。可以认为,这种策略是符合我们需求的。当然,还需要进一步的测试来进行验证。

源码

源码如下:
  1. /**
  2. * @return Region max size or <code>count of regions squared * flushsize, which ever is
  3. * smaller; guard against there being zero regions on this server.
  4. */
  5. long getSizeToCheck(final int tableRegionsCount) {
  6.   return tableRegionsCount == 0? getDesiredMaxFileSize():
  7.     Math.min(getDesiredMaxFileSize(),
  8.       this.flushSize * (tableRegionsCount * tableRegionsCount));
  9. }
  10.   
  11. @Override
  12. protected boolean shouldSplit() {
  13.   if (region.shouldForceSplit()) return true;
  14.   boolean foundABigStore = false;
  15.   // Get count of regions that have the same common table as this.region
  16.   int tableRegionsCount = getCountOfCommonTableRegions();
  17.   // Get size to check
  18.   long sizeToCheck = getSizeToCheck(tableRegionsCount);
  19.   
  20.   for (Store store : region.getStores().values()) {
  21.     // If any of the stores is unable to split (eg they contain reference files)
  22.     // then don't split
  23.     if ((!store.canSplit())) {
  24.       return false;
  25.     }
  26.   
  27.     // Mark if any store is big enough
  28.     long size = store.getSize();
  29.     if (size > sizeToCheck) {
  30.       LOG.debug("ShouldSplit because " + store.getColumnFamilyName() +
  31.         " size=" + size + ", sizeToCheck=" + sizeToCheck +
  32.         ", regionsWithCommonTable=" + tableRegionsCount);
  33.       foundABigStore = true;
  34.       break;
  35.     }
  36.   }
  37.   
  38.   return foundABigStore;
  39. }
分享到:
评论

相关推荐

    hbase0.94java源代码

    在0.94版本中,HBase已经相当成熟,提供了稳定性和性能上的优化。这个源代码包是针对Java开发者的宝贵资源,可以帮助他们深入理解HBase的内部工作原理,优化自己的应用,以及对HBase进行定制化开发。 HBase的核心...

    Hbase 0.94 api

    **HBase 0.94 API 知识点详解** HBase 是一个基于谷歌 Bigtable 模型构建的开源分布式数据库,属于 Apache Hadoop 生态系统的一部分。它设计用于存储和处理大规模数据,尤其适用于半结构化数据的实时查询。HBase ...

    hbase-0.94脚本hbase在cygwin的环境的bug

    HBase 0.94版本是在2012年发布的,虽然现在已经有了更新的版本,但了解其在特定环境如Cygwin中的运行问题仍然有价值,因为这可以帮助我们理解在不同平台上的兼容性和调试技巧。 Cygwin是一个在Windows操作系统上...

    hadoop1.0.2 hbase0.94安装

    本教程主要涵盖的是在较旧版本的Hadoop 1.0.2上安装并配置HBase 0.94,以及相关的MapReduce开发和Hadoop-Eclipse插件的编译。这些内容对于理解大数据处理的基本流程和工具使用具有重要意义。 首先,我们来详细讨论...

    Hadoop-2.4.0+Hbase-0.94.18+Nutch-2.3集群爬虫配置攻略

    总结来说,配置Hadoop-2.4.0+Hbase-0.94.18+Nutch-2.3集群爬虫涉及多个步骤,包括安装和编译软件、配置相关参数、启动服务以及运行爬虫。每个组件的配置都需要细致入微,确保它们能够协同工作。同时,由于不同版本...

    HBase 0.94.18 API.chm

    HBase api

    hbase-0.94.1手动数据迁移.docx

    在HBase这样的分布式数据库系统中,数据迁移是一个常见的任务,特别是在集群扩展、故障恢复...在进行此类操作时,理解每个步骤的目的和影响至关重要,同时也要根据实际情况调整策略,以确保迁移的成功和数据的完整性。

    hbase-0.94.18

    在这个绝版的"Hbase-0.94.18"版本中,我们可以深入了解早期HBase的设计思想和功能特性。 1. **分布式存储**: HBase是一种分布式、多版本、列导向的NoSQL数据库。它将数据存储在表中,由行键、列族、列和时间戳组成...

    08 安装配置hbase0.94.9

    - 启动时,Hadoop和Zookeeper的启动顺序不固定,但HBase必须在它们之后启动。 - 关闭时,HBase必须首先关闭,然后可以任意顺序关闭Hadoop和Zookeeper,以避免数据丢失或异常。 在安装和配置过程中,确保所有节点...

    hbase-0.94.13 jar和源码

    通过阅读源代码,我们可以深入理解HBase的工作原理,学习其内部的数据模型、数据分布策略、Region分裂和合并、故障恢复机制等核心概念。这对于优化HBase应用性能、解决实际问题以及贡献代码到HBase项目本身都是非常...

    HBase 0.94.4

    HBase 0.94.4.tar.gz,官网上只有新版本,0.94.4稳定版本,请下载使用。

    Hadoop-2.0.0-cdh4.3.0安装手册(hbase-0.94.15-cdh4.6.0)

    【Hadoop-2.0.0-cdh4.3.0 安装手册(hbase-0.94.15-cdh4.6.0)】 在云计算和大数据处理领域,Apache Hadoop 和 Cloudera's Distribution Including Apache Hadoop (CDH) 是广泛使用的开源框架。CDH4 是 Cloudera 提供...

    HBase写性能优化策略

    本文旨在提供一系列优化策略,以提高HBase的写入效率和数据写入的稳定性。 首先,要理解HBase写入数据的基本流程:数据首先顺序写入到HLog(WAL),这是一个写入操作的日志文件,用以确保数据的持久化和系统的容错...

    hbase-0.94.27.tar.gz

    14. **优化和调优**:HBase的性能受到多种因素影响,如Region大小、MemStore设置、Compaction策略等,需要根据实际工作负载进行细致的调优。 总的来说,`hbase-0.94.27.tar.gz`包含了一个完整的HBase实例,开发者和...

    hadoop-1.2.1 + zooKeeper3.4.5 + hbase-0.94集群安装部署

    企业内部实际 hadoop zookeeper hbase搭建步骤明细

    藏经阁-Pinterest的HBase升级实践.pdf

    Pinterest的HBase升级实践是一个关于将Pinterest的HBase从0.94版本升级到1.2版本的实践报告。本报告涵盖了HBase在Pinterest中的应用、升级的挑战、升级步骤、性能调整和最终结果。 一、HBase在Pinterest中的应用 ...

    hbase 0.9 api

    - `HBaseAdmin.split()`和`HBaseAdmin.mergeRegions()`方法允许管理员手动控制Region操作。 10. **监控与调试**: - HBase提供了丰富的JMX指标,可以通过JMX客户端监控HBase的运行状态。 - 使用`HBaseAdmin....

    HBase权威指南中文版

    本书以HBase0.94为基础,不仅深入探讨HBase的原理框架和数据模型,更重要的是通过实际案例教诲读者如何运用HBase框架来设计、搭建及运行大数据系统,同时结合生产案例剖析HBase系统运维和性能调优的技巧。

    阿里巴巴开源的Hbase Client node-hbase-client.zip

    当前状态:完全通过 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 ...

Global site tag (gtag.js) - Google Analytics