当前位置: 首页 > news >正文

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

1. region split机制

HRegionServer拆分region的步骤是,先将该region下线,然后拆分,将其子region加入到hbase:meta表中,再将他们加入到原本的HRegionServer中,最后汇报Master。

split前:hbase:meta表有: region_p

  • region_p对应的hdfs目录下生成.splits目录,用于保存分割后的region信息,如:tablename/region_p/.splits

  • 关闭region_p,数据写入并触发flush操作,将写入region的数据全部持久化到磁盘

  • 在region_p对应的.splits目录下,创建两个子目录,并在里面创建两个子region的引用文件
.split引用文件目录
tablename/region_p/.splits/region1/region1引用文件 (splitkey, true)
tablename/region_p/.splits/region2/region2引用文件 (splitkey, false)

引用文件用于记录从哪分割(splitkey)和是上半部分(true)还是下半部分(false)

  • region_p 分裂为两个子region后,将.split目录下的region1、region2 的目录 copy 到region_p的同级目录下,形成两个新的region。
tablename目录结构
tablename/region_p/.splits
tablename/region1/cf/region1引用文件(splitkey, true)
tablename/region2/cf/region2引用文件(splitkey, false)
  • 把region_p在hbase:meta表标记下线和split,把两个子region添加到hbase:mate表。
locationsplitofflinesplit
region_p/xxxx/xxxx/xxxx/truetrueregion1,region2
region1/xxxx/xxxx/xxxx/falsefalse
region2/xxxx/xxxx/xxxx/falsefalse
  • 开启两个子region,可以接收请求了。此时还没有拉取region_p split的数据。

  • 当region发生major compact时,会把父region的split数据拉取到子region,并和当前的子region进行合并,子region拉取完数据后,把引用文件删除。

  • hbase会启动线程检查父region是否达到删除的条件,如果达到就删除父region。

删除条件:父region的元数据是split状态and所有子region下的引用文件已删除。

2. region split策略

可以通过设置RegionSplitPolicy的实现类来指定拆分策略,RegionSplitPolicy类的实现类有:

ConstantSizeRegionSplitPolicyIncreasingToUpperBoundRegionSplitPolicyDelimitedKeyPrefixRegionSplitPolicyKeyPrefixRegionSplitPolicy
DisabledRegionSplitPolicy  // 不拆分

其中:

ConstantSizeRegionSplitPolicy:(一刀切)【0.94前】

​ 当一个region中最大store大小大于设置阈值(hbase.hregion.max.filesize 默认10G)就会触发切分,每10s检查一次region大小,hbase.server.thread.wakefrequency=10000

  • 设置阈值大些,对大表友好,但对小表并不友好,可能小表不会分裂;
  • 如果阈值小些,对小表友好,但对大表并不友好,可能会大量分裂;

IncreasingToUpperBoundRegionSplitPolicy【0.94-2.0】:

默认使用的拆分策略Region的前几次拆分的阈值不是固定的数值,是需要进行计算得到,当同一table在同一regionserver上的region数量在[0,100)之间时按照如下的计算公式算,否则按照ConstantSizeRegionSplitPolicy策略计算:

Min (R^3 "hbase.hregion.memstore.flush.size"2, "hbase.hregion.max.filesize")

  • R为同一个table中在同一个regionserver中region的个数

  • hbase.hregion.memstore.flush.size默认为128M

  • hbase.hregion.max.filesize默认为10G

第一次分裂: 1*1*1*128*2=256M

第二次分裂:8*128*2 = 2G

第三次分裂: 27*128*2 = 6.75G

SteppingSplitPolicy【2.x版本】:

​ 这种策略和IncreasingToUpperBoundRegionSplitPolicy策略很相似,但更简单,第一个Region容量的上限为256M,之后都是10G,这个策略考虑到IncreasingToUpperBoundRegionSplitPolicy会多拆分几个Region(256M -> 2G -> 6.75G -> 10G),所以进行了简化。

http://www.lryc.cn/news/484487.html

相关文章:

  • flink实战 -- flink SQL 实现列转行
  • React中右击出现自定弹窗
  • Unity类银河战士恶魔城学习总结(P128 Switch UI with KeyBoard用键盘切换UI)
  • 基于Springboot+微信小程序的急救常识学习系统 (含源码数据库)
  • 【云计算解决方案面试整理】3-7主流云计算平台、云计算架构、安全防护
  • 数据库范式、MySQL 架构、算法与树的深入解析
  • 设计模式之责任链模式(Chain Of Responsibility)
  • SQLite 全文检索:快速高效的文本查询方案
  • 【微信小程序】报修管理
  • C++——视频问题总结
  • Ubuntu24.04 network:0 unclaimed wireless adapter no found
  • Java 使用MyBatis-Plus数据操作关键字冲突报错You have an error in your SQL syntax问题
  • 深入浅出 ChatGPT 底层原理:Transformer
  • opc da 服务器数据 转 IEC61850项目案例
  • SystemVerilog学习笔记(十一):接口
  • 华大单片机跑历程IO口被写保护怎么解决
  • Iotop使用
  • 定积分的快速计算技巧
  • 第T7周:Tensorflow实现咖啡豆识别
  • imagehash图片去重:保留图片文件名
  • 在Docker环境下为Nginx配置HTTPS
  • vue面试题9|[2024-11-15]
  • 大数据技术在金融风控中的应用
  • 安装一键式重置密码插件(Linux)-CloudResetPwdAgent
  • 如何平滑切换Containerd数据目录
  • 月影和米家大路灯哪个好?书客、月影、米家谁会更胜一筹!
  • instanceof 的模式匹配(二)
  • 【Spring】Bean的作用域和Spring的执行流程
  • 自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术
  • QtWebServer