Hbase数据切分

通过切分,一个region变为两个近似相同大小的子region,再通过balance机制均衡到不同 region
server上,使系统资源使用更加均衡。

切分原因

  • 数据分布不均匀

    • 同一 region server 上数据文件越来越大,读请求也会越来越多。一旦所有的请求都落在同一
      个 region server 上,尤其是很多热点数据,必然会导致很严重的性能问题。
  • compaction性能损耗严重
    • compaction本质上是一个排序合并的操作,合并操作需要占用大量内存,因此文件越大,占
      用内存越多
    • compaction有可能需要迁移远程数据到本地进行处理(balance之后的compaction就会存在
      这样的场景),如果需要迁移的数据是大文件的话,带宽资源就会损耗严重
  • 资源耗费严重
    • HBase的数据写入量也是很惊人的,每天都可能有上亿条的数据写入
    • 不做切分的话一个热点region的新增数据量就有可能几十G,用不了多长时间大量读请求就会
      把单台region server的资源耗光。

触发时机

  • 每次数据合并之后都会针对相应region生成一个requestSplit请求,requestSplit首先会执行
    checkSplit,检测file size是否达到阈值,如果超过阈值,就进行切分。
  • 检查阈值算法主要有两种:ConstantSizeRegionSplitPolicy( 0.94版本)和
    IncreasingToUpperBoundRegionSplitPolicy(当前)
  • ConstantSizeRegionSplitPolicy :
    • 系统会遍历region所有store的文件大小,如果有文件大小 > hbase.hregion.max.filesize(默
      认10G),就会触发切分操作。
  • IncreasingToUpperBoundRegionSplitPolicy:
    • 如果store大小大于一个变化的阀值就允许split。
    • 默认只有1个region,那么逻辑这个region的store大小超过 1 * 1 * 1 * flushsize * 2 =
      128M * 2 =256M 时,才会允许split
    • 切分之后会有两个region,其中一个region中的某个store大小大于 2 * 2 * 2 * flushsize * 2
      = 2048M 时,则允许split
    • 后续超过hbase.hregion.max.filesize + hbase.hregion.max.filesize * 随机小数 *
      hbase.hregion.max.filesize.jitter才允许split
    • 基本也就固定了,如果粗劣的计算可以把这个hbase.hregion.max.filesize的大小作为最后的
      阀值,默认是10G

切分流程

  • 寻找切分点

    • 将一个region切分为两个近似大小的子region,首先要确定切分点。切分操作是基于region执
      行的,每个region有多个store(对应多个column famliy)。系统首先会遍历所有store,找
      到其中最大的一个,再在这个store中找出最大的HFile,定位这个文件中心位置对应的
      rowkey,作为region的切分点。
  • 开启切分事务

    • 切分线程会初始化一个SplitTransaction对象,从字面上就可以看出来split流程是一个类似‘事
      务’的过程,整个过程分为三个阶段:prepare - execute - rollback

    • prepare阶段

      • 在内存中初始化两个子region,具体是生成两个HRegionInfo对象,包含tableName、
        regionName、startkey、endkey等。同时会生成一个transaction journal,这个对象
        用来记录切分的进展
    • execute 阶段

      • region server 更改ZK节点 /region-in-transition 中该region的状态为SPLITING。
      • master检测到region状态改变。
      • region在存储目录下新建临时文件夹.split保存split后的daughter region信息。
      • parent region关闭数据写入并触发flush操作,将写入region的数据全部持久化到磁盘。
      • 在.split文件夹下新建两个子文件夹,称之为daughter A、daughter B,并在文件夹中生
        成引用文件,分别指向父region中对应文件。
      • 将daughter A、daughter B拷贝到HBase根目录下,形成两个新的region。
      • parent region通知修改 hbase.meta 表后下线,不再提供服务。
      • 开启daughter A、daughter B两个子region。
      • 通知修改 hbase.meta 表,正式对外提供服务。
    • rollback阶段

      • 如果execute阶段出现异常,则执行rollback操作。
      • 为了实现回滚,整个切分过程被分为很多子阶段,回滚程序会根据当前进展到哪个子阶
        段清理对应的垃圾数据。

切分优化

  • 对于预估数据量较大的表,需要在创建表的时候根据rowkey执行 region 的预分配。
  • 通过region预分配,数据会被均衡到多台机器上,这样可以一定程度解决热点应用数据量剧增导致
    创建表的时候根据rowkey执行 region 的预分配。
  • 通过region预分配,数据会被均衡到多台机器上,这样可以一定程度解决热点应用数据量剧增导致
    的性能问题。

Hbase的数据切分相关推荐

  1. HBase原理 -Regin切分

    文章目录 **Region切分触发策略** **Region切分准备工作-寻找SplitPoint** **Region核心切分流程** **Region切分事务性保证** **Region切分对其他 ...

  2. Hbase Region的切分与合并【原理分析】

    一.Region的切分 Region的自动切分 Region自动切分是HBase能够拥有良好扩张性的最重要因素之一,当然他也是分布式系统追求扩展性很好的功能.当一个Region大到一定程度,会进行分裂 ...

  3. Hbase读写数据过程详解(hbase0.96版本之前与hbase0.96版本之后对比)

    @Author : Spinach | GHB @Link : http://blog.csdn.net/bocai8058 文章目录 HBase架构图 -ROOT-和.META.结构 -ROOT- ...

  4. 可伸缩性架构常用技术——之数据切分

    可伸缩性架构常用技术 --之数据切分(Data Sharding/Partition) 1 简介 本来想写一篇可伸缩性架构方面的文章,发现东西太多了,久久未能下笔,这里首先把大家最关注的数据切分(Pa ...

  5. hbase数据读取优化_从hbase读取数据优化策略和实验对照结果

    起因:工作须要.我须要每5分钟从hbase中.导出一部分数据,然后导入到ES中.可是在開始阶段编写的python脚本,我发现从hbase读取数据的速度较慢,耗费大量的时间.影响整个导数过程,恐怕无法在 ...

  6. 阿里HBase的数据管道设施实践与演进

    为什么80%的码农都做不了架构师?>>>    摘要:第九届中国数据库技术大会,阿里巴巴技术专家孟庆义对阿里HBase的数据管道设施实践与演进进行了讲解.主要从数据导入场景. HBa ...

  7. 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据

    通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据\ 下文将重点说明通过Sqoop实现Mysql与HDFS互导数据,Mysql与Hbase,Oracle与Hbase的互 ...

  8. SpringBoot整合HBase将数据写入Docker中的HBase

    在之前的项目里,docker容器中已经运行了HBase,现将API操作HBase实现数据的增删改查 通过SpringBoot整合Hbase是一个很好的选择 首先打开IDEA,创建项目(project) ...

  9. 数据切分——Atlas读写分离Mysql集群的搭建

    关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog ...

最新文章

  1. 人的一生,到底在追求甚么?...
  2. 移动端python开发_python前端之移动端库、框架及自动化和优化
  3. 一起学并发编程 - 钩子函数(shutdownHook)
  4. 如何创建一个完美的单例模式
  5. selenium并行_如何在不同的浏览器中设置Selenium网格以并行执行
  6. 使用IPFS集群搭建创建私有IPFS网络
  7. 一定质量的封闭气体被压缩后_单螺杆压缩机
  8. MongoDB 3.0+访问数据库的方法
  9. java导入jar包源码_eclipse中导入jar包的源码
  10. 色差类染疵原因的详细分析
  11. matlabpython建模_参加数学建模用 MATLAB,还是 Python?
  12. 第二季-专题6-点亮指路灯
  13. PyKDL---正运动学和逆运动学
  14. linux虚拟主机的三种方法
  15. java在控制台打印心形图案
  16. Lidar Object detection
  17. C语言 吃鱼还是吃肉
  18. php调用chromium截图,chromium截图实现
  19. KeyBert、TextRank等九种本文关键词提取算法(KPE)原理及代码实现
  20. 网络对抗技术—实验报告一

热门文章

  1. 如何更改计算机管理员账户名称,win10系统管理员名称怎么改_win10管理员账户名怎么修改...
  2. Jmeter录制脚本,HTTP代理服务器介绍使用
  3. fx3u4ad一adp说明书_三菱PLC模块FX3U-4AD与FX3U-4AD-ADP的区别
  4. 计算机上的aece代表什么意思,Myristicaceae是什么意思
  5. 计算机设计辅助 CAD 试题汇编,计算机辅助设计试题汇编-第二单元
  6. PHPStorm 常用设置
  7. laravel使用scout和elasticsearch中文分词ik
  8. IPv6地址基础理论讲解
  9. AutoCAD安装失败怎样卸载重新安装AutoCAD,解决AutoCAD安装失败的方法总结【转载】
  10. 恒大通关世界500强:一家房企的进阶路与中国民营企业的边界探索