`

HBase-0.95.1源码分析之split

阅读更多
 

split操作执行的是将HBase中较大的Region分为两个。因为split比较耗时,因此split是在独立的线程中完成的,相关类是CompactSplitThread。

首先,CompactSplitThread中分区的方法主要是以下两个:

CompactSplitThread.requestSplit(HRegion):检测是否需要分区,如果需要分区则调用requestSplit(HRegion, byte[])

CompactSplitThread.requestSplit(HRegion, byte[]):执行分区操作<用户手动分区调用的也是该方法>

 

CompactSplitThread.requestSplit(HRegion r)

1>      CompactSplitThread.shouldSplitRegion():《hbase.regionserver.regionSplitLimit,区域数超过该值则不再进行分区》

2>      HRegion.checkSplit():调用的是RegionSplitPolicy.shouldSplit()

分区策略类的配置属性为:

hbase.regionserver.region.split.policy:IncreasingToUpperBoundRegionSplitPolicy<0.94版本之前默认为ConstantSizeRegionSplitPolicy>

IncreasingToUpperBoundRegionSplitPolicy类中shouldSplitRegion()方法首先根据当前分区所属表的分区数计算实际上用于确定是否需要分区的上限大小:

< long sizeToCheck = tableRegionsCount == 0 ? getDesiredMaxFileSize() : Math.min(getDesiredMaxFileSize(), this.flushSize * tableRegionsCount * tableRegionsCount);>

0.94版本之前是存储文件大小的上限是<hbase.hregion.max.filesize=10G:一个区域的某个列族所有HStoreFile总大小,超过则进行分区>,只有达到了该上限才会进行分区。

如果分区中某一个store(列族)的所有存储文件大小大于以上限制,则判断为需要分区。

方法具体内容如下:

复制代码
 1     @Override
 2     protected boolean shouldSplit() {
 3         if (region.shouldForceSplit()) {
 4             return true;
 5         }
 6         boolean foundABigStore = false;
 7         // Get count of regions that have the same common table as this.region
 8         int tableRegionsCount = getCountOfCommonTableRegions();
 9         // Get size to check
10         long sizeToCheck = getSizeToCheck(tableRegionsCount);
11 
12         for (Store store : region.getStores().values()) {
13             // If any of the stores is unable to split (eg they contain reference files) then don't split
14             if (!store.canSplit()) {
15                 return false;
16             }
17 
18             // Mark if any store is big enough
19             long size = store.getSize();
20             if (size > sizeToCheck) {
21                 IncreasingToUpperBoundRegionSplitPolicy.LOG.debug("ShouldSplit because " + store.getColumnFamilyName() + " size=" + size + ", sizeToCheck=" + sizeToCheck + ", regionsWithCommonTable=" + tableRegionsCount);
22                 foundABigStore = true;
23                 break;
24             }
25         }
26         return foundABigStore;
27     }
复制代码

分区过程调用堆栈如下:

1>      CompactSplitThread .requestSplit(HRegion r, byte[] midKey)

this.splits.execute(new SplitRequest(r, midKey, this.server));

  SplitTransaction.prepare()

  SplitTransaction.execute(Server, RegionServerServices)

    createDaughters(Server, RegionServerServices)

    1>        关闭父区域并从在线区域列表中移除

    2>        对父区域的HStoreFile进行split操作

    3>        创建子女区域

    4>        元数据修改

    openDaughters(Server, RegionServerServices, HRegion, HRegion)

 

split触发时机:

1>        compact之后会调用CompactSplitThread.requestSplit(HRegion)

2>        flush之前会检测区域中HStoreFile数目是否超过hbase.hstore.blockingStoreFiles,如果超过且没有等待超时会调用CompactSplitThread.requestSplit(HRegion)

3>        flush之后会调用HRegion.checkSplit()检测是否需要split,如果需要则调用CompactSplitThread.requestSplit(HRegion)

http://www.cnblogs.com/yshb/p/3256131.html
分享到:
评论

相关推荐

    hbase-2.0.2.3.1.4.0-315-bin.tar.gz

    ambari-2.7.5 编译过程中四个大包下载很慢,所以需要提前下载,包含:hbase-2.0.2.3.1.4.0-315-bin.tar.gz ,hadoop-3.1.1.3.1.4.0-315.tar.gz , grafana-6.4.2.linux-amd64.tar.gz ,phoenix-5.0.0.3.1.4.0-315....

    hbase-1.0.1.1-bin.tar.gz.zip

    这个“hbase-1.0.1.1-bin.tar.gz.zip”文件是HBase的1.0.1.1版本的二进制发行版,包含了运行和管理HBase所需的所有文件。以下将详细介绍HBase的关键特性、架构以及如何使用这个压缩包进行安装和配置。 1. **HBase...

    hbase-1.2.6.1-bin.tar.gz

    hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz,hbase-1.2.6.1-bin.tar.gz

    hbase-2.0.0.3.0.0.0-1634-bin.tar.gz

    本文将围绕"Hbase-2.0.0.3.0.0.0-1634-bin.tar.gz"这个压缩包,探讨如何在Ambari 2.7.x环境下进行HBase的编译和使用,以及该版本的HBase在特定环境下的特点和注意事项。 一、HBase 2.0.0.3.0.0.0-1634简介 HBase ...

    hbase-0.90.5.tar.gz与hadoop0.20.2版本匹配

    标题提及的“hbase-0.90.5.tar.gz”是一个压缩文件,包含了HBase的0.90.5版本的所有源码、编译后的二进制文件、配置文件以及相关的文档。这个版本的HBase是针对Hadoop 0.20.2版本优化的,这意味着它可以在运行Hadoop...

    hbase-0.98.12.1-hadoop1-bin.tar.gz

    本文将围绕"Hbase-0.98.12.1-hadoop1-bin.tar.gz"这一特定版本的HBase进行详细介绍,包括其特性、安装与配置、以及与Hadoop1的集成。 1. **HBase 0.98.12.1概述** HBase 0.98.12.1是HBase的早期稳定版本,提供了...

    pinpoint的hbase初始化脚本hbase-create.hbase

    搭建pinpoint需要的hbase初始化脚本hbase-create.hbase

    hbase-1.3.1-bin.tar.gz.7z

    进入 `conf` 目录,复制 `hbase-site.xml.example` 文件为 `hbase-site.xml`,并编辑该文件,添加如下配置: ```xml &lt;name&gt;hbase.rootdir &lt;value&gt;hdfs://namenode_host:port/hbase &lt;name&gt;hbase.cluster....

    hbase-1.0.1.1-bin.tar.gz

    在这个“hbase-1.0.1.1-bin.tar.gz”压缩包中,包含了运行和管理HBase所需的所有文件。 1. **HBase概述**: - **列族式存储**:HBase不同于传统的关系型数据库,它按照列族存储数据,每个列族包含一系列相关的列,...

    hbase-1.2.1-bin.tar.gz.zip

    总之,HBase-1.2.1的二进制压缩包提供了在Hadoop环境下部署和运行HBase所需的所有组件,适用于处理大量非结构化或半结构化数据的场景,如实时分析、日志处理、物联网应用等。正确解压并配置后,用户可以充分利用...

    hbase-0.98.17-hadoop2-bin.tar.gz

    - 使用 `tar -zxvf hbase-0.98.17-hadoop2-bin.tar.gz` 命令进行解压,这将创建一个名为 `hbase-0.98.17-hadoop2` 的目录。 2. **配置环境变量**: - 编辑 `~/.bashrc` 或 `~/.bash_profile` 文件,添加HBase的...

    hbase-1.4.10-bin.tar.gz

    在这个场景中,我们关注的是"Hbase-1.4.10-bin.tar.gz",这是HBase 1.4.10版本的二进制发行包,适用于Linux操作系统。 首先,安装HBase前,确保你的Linux系统已经安装了Java开发环境(JDK),因为HBase依赖于Java...

    hbase-site.xml.doc

    HBase 配置文件 hbase-site.xml 详解 HBase 是一个基于 Hadoop 的分布式、面向列的 NoSQL 数据库,它提供了高性能、可扩展、可靠的数据存储解决方案。HBase 的配置文件 hbase-site.xml 是其核心配置文件,本文将...

    hbase-2.4.11-bin.tar.gz

    标题中的“hbase-2.4.11-bin.tar.gz”是指HBase的2.4.11稳定版本的二进制压缩包,用户可以通过下载这个文件来进行安装和部署。 HBase的核心设计理念是将数据按照行和列进行组织,这种模式使得数据查询和操作更加...

    HBase(hbase-2.4.9-bin.tar.gz)

    HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...

    hbase-meta-repair-hbase-2.0.2.jar

    HBase 元数据修复工具包。 ①修改 jar 包中的application.properties,重点是 zookeeper.address、zookeeper.nodeParent、hdfs....③开始修复 `java -jar -Drepair.tableName=表名 hbase-meta-repair-hbase-2.0.2.jar`

    apache-phoenix-4.14.3-HBase-1.3-bin.tar.gz

    这个"apache-phoenix-4.14.3-HBase-1.3-bin.tar.gz"文件是Phoenix的特定版本,针对HBase 1.3构建的二进制发行版。 1. **Apache Phoenix架构**:Phoenix主要由四部分组成:SQL解析器、元数据存储、优化器和执行器。...

    phoenix-client-hbase-2.2-5.1.2.jar

    phoenix-client-hbase-2.2-5.1.2.jar

    phoenix-hbase-2.2-5.1.2-bin.tar.gz

    总的来说,`phoenix-hbase-2.2-5.1.2-bin.tar.gz`是大数据存储和分析领域的重要工具,它结合了HBase的分布式存储能力和Phoenix的SQL查询能力,为大数据处理提供了一种高效、易用的解决方案。无论是对大数据新手还是...

    最新版linux hbase-2.3.3-bin.tar.gz

    1. 下载HBase的tarball文件:`wget http://apache.mirrors.ionfish.org/hbase/stable/hbase-2.3.3-bin.tar.gz` 2. 解压文件:`tar -xvf hbase-2.3.3-bin.tar.gz` 3. 移动到期望的安装目录,例如 `/usr/local/`:`...

Global site tag (gtag.js) - Google Analytics