HBase 1.1.2 split 策略

HBase Region split 策略 本文是基于hbase-0.98.6-cdh5.2.0的Region split policyHBase的region split策略。 阅读详情

背景:

今天让同事用ycsb做HBase的性能测试,他跟我反馈reigon总是在配置的大小前split(配置的是10G),于是我就给他说起了hbase的spilt策略:从0.94增加了新的策略,还是在会每次flush的时候会去判断需不需要split,但是判断的策略有了改变,会比较现有文件的大小与改表region个数的平方*memstore大小的关系,如果前者较大也会去做split,巴拉巴拉。但他跟我说region个数的平方*memstore这个不对吧,日志里是memstore二倍的大小,还给我截图为证,无奈,就翻看了1.1.2的代码,发下算法真的变了,对应变成了region个数的三次方*2*memstore。

日志如下:

regionserver.IncreasingToUpperBoundRegionSplitPolicy: ShouldSplit because 0 size=296442912, sizeToCheck=268435456, regionsWithCommonTable=1
从日志中可以看到,每次flush时候都会调用IncreasingToUpperBoundRegionSplitPolicy类中的shouldSplit方法,方法内容如下:

 @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()) {
      // 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;
      }
    }

    return foundABigStore;
  }

代码说明:

首先,通过getCountOfCommonTableRegions()方法获取目前的region个数tableRegionCount,然后通过getSizeTOCheck(tableRegionCount)方法运算得出一个阈值sizeToCheck,接着在for循环中遍历该reigon下所有的sotre,如果有store不能做split(调用HStore类的canSplit方法,该方法判断store下的hfile是否有被reference的,即region刚拆分,但hfile还处于reference状态,未完成拆分),直接返回false。如果该store可以做split,则比较store下hfile的大小与sizeToCheck的值,如果大于则标识foundABigStore置为true。

接着看下getSizeTOCheck(tableRegionCount)方法:

  protected long getSizeToCheck(final int tableRegionsCount) {
    // safety check for 100 to avoid numerical overflow in extreme cases
    return tableRegionsCount == 0 || tableRegionsCount > 100 ? getDesiredMaxFileSize():
      Math.min(getDesiredMaxFileSize(),
        this.initialSize * tableRegionsCount * tableRegionsCount * tableRegionsCount);
  }

代码说明:

如果tableRegionCount的值是0或者大于100,则通过getDesiredMaxFileSize()方法读取配置文件中的hbase.hregion.max.filesize值(即前文说的10G),否则进行Math.min判断,后面tableRegionCount三次方很容易理解,看看initialSize怎么来的,相关方法内容如下:

@Override
  protected void configureForRegion(HRegion region) {
    super.configureForRegion(region);
    Configuration conf = getConf();
    this.initialSize = conf.getLong("hbase.increasing.policy.initial.size", -1);
    if (this.initialSize > 0) {
      return;
    }
    HTableDescriptor desc = region.getTableDesc();
    if (desc != null) {
      this.initialSize = 2*desc.getMemStoreFlushSize();
    }
    if (this.initialSize <= 0) {
      this.initialSize = 2*conf.getLong(HConstants.HREGION_MEMSTORE_FLUSH_SIZE,
        HTableDescriptor.DEFAULT_MEMSTORE_FLUSH_SIZE);
    }
  }

代码说明:

代码逻辑也是非常简单,这里不再赘述。

补充,昨天以为getCountOfCommonTableRegions()的逻辑是获取这张表所有的region,今天测试发现不是这样,回头再看代码,代码内容如下:

  private int getCountOfCommonTableRegions() {
    RegionServerServices rss = this.region.getRegionServerServices();
    // Can be null in tests
    if (rss == null) return 0;
    TableName tablename = this.region.getTableDesc().getTableName();
    int tableRegionsCount = 0;
    try {
      List<Region> hri = rss.getOnlineRegions(tablename);
      tableRegionsCount = hri == null || hri.isEmpty()? 0: hri.size();
    } catch (IOException e) {
      LOG.debug("Failed getOnlineRegions " + tablename, e);
    }
    return tableRegionsCount;
  }
}


代码说明:

首先获取该region所在的regionserver,然后获取该regionserver上的所有region,而不是该表在整个集群中的region数量。




Hbase Split 解析 HBase Split是hbase根据一定的触发条件和一定的分裂策略将HBase的一个region进行分裂成两个子region并对父region进行清除处理的过程。Region是HBase中一个非常核心的组织单元,所有的region组成了整个HBase集群,如下面的HBase的体系结构所示:在HBase中,split其实是进行sharding的一种技术手段,通过HBase的split条件和split 阅读详情

相关推荐

【硬刚Hbase】HBASE进阶(4): StoreFile Compaction/Region Split

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hbase部分补充。 1 StoreFileCompaction   由于memstore每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp)和不同类型(Put/Delete)有可能会分布在不同的HFile中,因此查询时需要遍历所有的HFile。为了减少HFile的个数,以及清理掉过期和删除的数据,会进行StoreFileCompaction。   Compaction分为两种,分别是Min..

微信搜:import_bigdata,大数据领域硬核原创作者 554

hbase源码分析-是否split

@Override protected boolean shouldSplit() { if (region.shouldForceSplit()) return true; boolean foundABigStore = false; // Get count of regions that have the same common table as this.re

qq234568970的博客 410

基于单片机智能家居控制系统设计

*单片机设计介绍,基于单片机智能家居控制系统设计。

QQ2193276455的博客 1717

HBase的Region Split详解

region split是hbases随着数据的不断写入,将一个region切分为两个小region,并将切分后的,以达到将到其他节点。

qq_42456324的博客 1482

【漏洞修复】Diffie-Hellman Key Agreement Protocol 资源管理错误漏洞(CVE-2002-20001)

Diffie-Hellman Key Agreement Protocol 存在安全漏洞,远程攻击者可以发送实际上不是公钥的任意数字,并触发服务器端DHE模幂计算。

我的博客 1万+

8、鼠疫流行过程的计算机建模介绍

本博文介绍了一种基于概率细胞自动机和蒙特卡罗方法的计算机模型,用于模拟由大沙鼠传播的鼠疫流行过程。结合GIS和遥感技术,该模型能够分析鼠疫在不同聚居地类型和季节变化下的传播特征,揭示了群落密度、分布及流行接触率对鼠疫传播的影响。研究还验证了模型与自然流行过程的一致性,并探讨了鼠疫在宿主数量低谷时的持续机制。模型为鼠疫防控和流行病研究提供了定量分析工具。

x2y3z4a5b的博客 107

Hbase split Region

region split是hbases水平扩展一个重要因素。随着数据的不断写入,将一个region切分为两个小region,并将切分后的region放在不同的节点上,以达到将负载进行均衡到其他节点。 随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会 两个新的region(裂变);

myself_ning的博客 1113

让旧 Append 字段升级为真正的 Key User Custom Field:基于 SCFD_EUI 的无损转换与 UI / API 暴露实战

摘要:SAP S/4HANA私有云和本地部署项目中,常面临将历史遗留的手工追加字段转换为可管理的Custom Field的挑战。SAP提供通过事务码SCFD_EUI将旧字段转换为ABAP Managed Field(AMF)的路径,实现字段名和数据原地保留的同时获得扩展能力。适用场景包括已沉淀多年数据的字段迁移成本高,或对数据元素有特殊约束需求。转换后字段可在Fiori UI、报表、表单等多触点统一管理。但AMF会增加复杂度,建议优先使用标准Custom Field。操作前需确保开发环境和传输配置正确,并遵

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 247

Hbase总结03_数据管理

存储 下图展示Hbase与Hadoop数据交互过程 Hbase处理文件类型有两种:预写日志(Hlog)和实际的数据文件。 写数据流程 流程如图 1)Client 向 HregionServer 发送写请求; 2)HregionServer 将数据写到 HLog(write ahead log)。为了数据的持久化和恢复; 3)HregionServer 将数据写到内存(MemSto...

tyf2007635的博客 327

Spring AI 实战:第五章、Spring AI本地模型部署之省钱小能手

白嫖的快乐你想象不到经过这番折腾,我们成功实现了零成本使用大模型完全本地运行保障隐私可视化访问Java生态无缝集成但可能有的小伙伴要吐槽,怎么换个底层模型这次就新建一个工程了呢?不能在以前的工程上开发吗?这样也太不优雅了吧~,我知道你很急,但先别急,等下一章节再来解决这个问题。为什么程序员特别喜欢Ollama?因为它就像一只温顺的羊驼——不花钱还能24小时产出代码!

liaokailin的专栏 922

[AHK]获取通达信软件上的股票代码

PC上的股票交易软件的自动止损、自动下单等功能比较弱,不如期货交易软件。 自力更生,程序员都是自己打造工具。 根据IPO模型(Input 输入,Process处理,Output输出),为了方便自动化首先要获取当前交易软件上浏览的股票代码。 截图再OCR显然太麻烦,通过Winspy工具查看下交易软件自带功能的消息号(33780),大家记住这个号码! 下面在用AutoHotkey作为变成语...

liuyukuan的专栏 1万+

hbase 二进制数据写入_Hbase对于大对象存储的三种主要解决方案

本帖最后由 非鱼 于 2015-4-29 12:23 编辑方案1:HBase自身的大对象存储方案由于HBase底层数据都是以Bytes数组来存储,对于非结构化数据的大对象可以很容易的转成Bytes数组存进HBase。另一方面,由于HBase是一个按列存储的数据库,在一个大表中,为了不让大对象影响其他结构化数据的读性能,可以将大对象数据单独存储进HBase表的单个Column Family中。这种方...

weixin_33232550的博客 1017

LeRobot 入门教程(十三)集成自定义的机器人、相机等硬件

本文详细介绍了如何将自定义机器人集成到LeRobot生态系统的完整流程。主要内容包括:1)硬件准备与通信接口选择;2)继承Robot基类实现标准接口;3)定义观察特征和动作特征;4)处理设备连接/断开逻辑;5)支持校准与配置;6)实现核心传感器读取和动作发送功能;7)可选遥操作器集成;8)遵循4项规范打包自定义设备(命名前缀、类名对应、文件结构、模块暴露);9)提供了完整实现示例。通过该方案,开发者可让自定义机器人兼容LeRobot的数据采集、控制管道和策略训练等全套工具链。

2506_90492529的博客 1902

HBase的核心工作机制

​ 指的是当StoreFile不断的进行合并操作, 这个大的HFile就会变得越来越大, 当这个HFile达到一定阈值后, 就会触发Split分裂机制。思考: 请问 多个Master启动后, 如何选定谁成为Active Master呢?思考: Master是如何感知到RegionServer上线和下线呢?思考: 如果从一开始, 就有大量的并发, 如何解决呢?思考: 为啥要分裂呢?相关配置: hbase-site.xml。针对某一个表的列族开启: 优先级最高的。为什么是最终10GB呢?

yqqの博客 585

GD32F303标准库开发:Keil5新建GD32标准库工程

GD32F303标准库开发:Keil5新建GD32标准库工程

MQ0522的博客 8905

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Hadoop2.7.1+Hbase1.2.1集群环境搭建(7)hbase 性能优化

(1)hadoop2.7.1源码编译 http://aperise.iteye.com/blog/2246856 (2)hadoop2.7.1安装准备 http://aperise.iteye.com/blog/2253544 (3)hadoop2.7.1安装 http://aperise.iteye.com/blog/2245547 (4)hbase安装准备 h...

猿类崛起 385

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

hbase split策略

hbase版本:1.2.4    当前版本默认的region split策略是      hbase.regionserver.region.split.policy org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy hbase-default.xml         同一

刘光华的专栏 1761

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

hbase region split策略

hbase 0.94.0版本中,对于region的split方式引入了一个非常方便的SplitPolicy,通过这个SplitPolicy,可以主动的干预控制region split的方式。在org.apache.hadoop.hbase.regionserver包中,可以找到这么几个自带的splitPolicy:ConstantSizeRegionSplitPolicy,IncreasingTo...

kuyuyingzi的专栏 420

HBase Split分析

本人结合HBase的源代码,对HBase的Split流程做了整体的分析,并结合实际的操作列出了一些注意的点,望能给对HBase感兴趣的人提供一定的帮助。

dcswin的博客 5904

浅析HBase1.2.0的Split机制

日前,在项目进行过程中,需要把一部分不大不小的数据暂时存起来,所以个人想到的就是放到HBase好了,手上刚好有现成的代码和环境,但是扔到表中发现表从最初的1个Region分裂成了4个Region。 而系统在hbase-site.xml文件中Store的大小最大设置的是10G: </property> <property> <...

淡定一生2333的博客 1331

hbase分析之split策略

目录 RegionSplitPolicy IncreasingToUpperBoundRegionSplitPolicy策略: SteppingSplitPolicy策略: ConstantSizeRegionSplitPolicy策略: KeyPrefixRegionSplitPolicy策略: DelimitedKeyPrefixRegionSplitPolicy策略: Busy...

u012447842的博客 1960

【大数据学习 | HBASE高级】region split机制和策略

hbase:meta表有: region_p在。

2301_80912559的博客 1342

hbase split

Region Split Region大小超过阀值(可以是hbase.hregion.max.filesize也可以是建表时列族配置的大小)后会触发Split,由RegionServer负责来拆分region并且offline下线该region。随后将两个子region添加到hbase:meta并在RegionServer上打开后汇报给HMaster。默认情况下Region会自动触发split,同时也可以手动运行split命令。 Region Split可以手动split也可以自动split(建议),其中

mnasd的博客 1506

HBase 0.94之后Split策略

HBase 0.94中的Split策略 HBase 0.94之前版本中,split使用的是ConstantSizeRegionSplitPolicy。当region中文件大小超过配置中所指定大小时,会进行切分。 而在0.94版本之后,默认split策略修改为了IncreasingToUp...

chenxiong0715的博客 212

HBase的split分析

HBase在新建一个表的时候,默认会把所有数据都会放在一个HRegion上,主节点HMaster根据一定的策略把HRegion分配到不同的HRegionServer从节点上,客户端在进行读写操作的时候,就会访问对应HRegionServer的HRegion。当HRegion的数据量超过阀值的时候,为了防止单个热点访问带来的压力,HBase就会对HRegion进行split操作,一个父HRegion

PunC的专栏 2126

HBase Compaction & Split

Compaction memoryStore在满足两个条件后,就会flush。 随着时间的推移,Store中的小Hfile越来越多,导致性能下降,故需要compaction。 compaction即将小的HFile合并成大的Hfile文件。 Compaction Minor compactions:一个store中hfile合并成一个大的hfile Major compactions:合并一个...

XiangYu328的博客 494
上一篇: HBase 1.1.2 Java 客户端 api(hbase 1.0 增删改查,建表、删表等)
下一篇: kafka数据同步/镜像工具 kafka mirror maker
数大招疯
博客等级 码龄16年 237粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值