• HBase的flush(刷写)及compact(合并)机制


    1、Flush机制

    (1)当memstore的大小超过这个值的时候,会flush到磁盘,默认为128M

    1. <property>
    2. <name>hbase.hregion.memstore.flush.sizename>
    3. <value>134217728value>
    4. property>

    (2)当memstore中的数据时间超过1小时,会flush到磁盘

    1. <property>
    2. <name>hbase.regionserver.optionalcacheflushintervalname>
    3. <value>3600000value>
    4. property>

    (3)HregionServer的全局memstore的大小,超过该大小会触发flush到磁盘的操作,默认是堆大小的40%

    1. <property>
    2. <name>hbase.regionserver.global.memstore.sizename>
    3. <value>0.4value>
    4. property>

    (4)手动flush

    flush tableName

    2、阻塞机制

            以上介绍的是Store中memstore数据刷写磁盘的标准,但是Hbase中是周期性的检查是否满足以上标准满足则进行刷写,但是如果在下次检查到来之前,数据疯狂写入Memstore中,会出现什么问题呢?会触发阻塞机制,此时无法写入数据到Memstore,数据无法写入Hbase集群。

    • memstore中数据达到512MB

         计算公式:base.hregion.memstore.flush.size*hbase.hregion.memstore..block.multiplier
      hbase.hregion.memstore.flush.size刷写的阀值,默认是 134217728,即128MB。
      hbase.hregion.memstore.block.multiplier是一个倍数,默认 是4。

    • RegionServer全部memstore达到规定值

      hbase.regionserver.global.memstore.size.lower.limit是0.95,
      hbase.regionserver.global.memstore.size是0.4,
      堆内存总共是 16G,
      触发刷写的阈值是:6.08GB
      触发阻塞的阈值是:6.4GB

    3、Compact合并机制

    在hbase中主要存在两种类型的compac合并

    • minor compact 小合并
      • 在将Store中多个HFile(StoreFile)合并为一个HFile

            这个过程中,删除和更新的数据仅仅只是做了标记,并没有物理移除,这种合并的触发频率很高。

      • minor compact文件选择标准由以下几个参数共同决定:
        1. <property>
        2. <name>hbase.hstore.compaction.minname>
        3. <value>3value>
        4. property>
        5. <property>
        6. <name>hbase.hstore.compaction.maxname>
        7. <value>10value>
        8. property>
        9. <property>
        10. <name>hbase.hstore.compaction.min.sizename>
        11. <value>134217728value>
        12. property>
        13. <property>
        14. <name>hbase.hstore.compaction.max.sizename>
        15. <value>9223372036854775807value>
        16. property>

        触发条件

        • memstore flush

          在进行memstore flush前后都会进行判断是否触发compact

        • 定期检查线程

             周期性检查是否需要进行compaction操作,由参数:hbase.server.thread.wakefrequency决定,默认值是10000 millseconds

    • major compact 大合并
      • 合并Store中所有的HFile为一个HFile

            这个过程有删除标记的数据会被真正移除,同时超过单元格maxVersion的版本记录也会被删除。合并频率比较低,默认7天执行一次,并且性能消耗非常大,建议生产关闭(设置为0),在应用空闲时间手动触发。一般可以是手动控制进行合并,防止出现在业务高峰期。

      • major compaction触发时间条件
        1. <property>
        2. <name>hbase.hregion.majorcompactionname>
        3. <value>604800000value>
        4. property>
      • 手动触发
        1. ##使用major_compact命令
        2. major_compact tableName
  • 相关阅读:
    呕血回顾一次提高接口并发的经历,很实用
    Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】
    咳嗽检测深度神经网络算法
    【毕业设计】基于单片机的智慧农业管理系统 -大棚管理系统 自动灌溉系统
    Hadoop3:MapReduce源码解读之Map阶段的TextInputFormat切片机制(3)
    HR人才测评,如何做管理岗位的领导力测评?
    ​探秘 Web 水印技术
    Android茶叶进销存
    银河麒麟V10(Kylin Linux V10)之ElasticSearch部署
    第三十篇 slot - 插槽
  • 原文地址:https://blog.csdn.net/weixin_52851967/article/details/127593555