因为HBase的数据存储使用的是HDFS,而HDFS是不支持随机读写的,所以HBase的数据写入采用LSM算法。LSM算法一般会分内存和磁盘两部分存放数据,在HBase的实现中,内存部分称作MemStore,采用的是跳跃表实现,维护了一个有序的KeyValue集合,磁盘部分有0到多个内部KeyValue有序的HFile文件组成。这些HFile文件,就是一些机制的触发下,将内存中MemStore数据刷写到磁盘形成的(其中,有些HFile文件是通过一些小的HFile文件采用多路归并算法合并形成)。

如上图,一台RegionServer服务器上会管理着多个Region,一个Region中可能会有1到多个列族。在存储上,一个列族对应一个Store,而一个Store就包括了LSM中提到的MemStore和StoreFile(即HFile)两部分。需要注意的是:刷写的最小执行单元是 Region而不是单个MemStore。如果一个 HRegion 中 Memstore 过多,当执行flush时,有可能有些MemStore数据量占比很小,比如k级别,刷写的话也不会释放很多内存,却会产生很多小文件,这也是官方建议大家设计表时列族不要太多的原因。

触发MemStore刷写的机制大概分为:人为手动触发、HBase定时触发、HLog数量限制触发,其他事件触发(Compact、Split、Truncate等)、内存限制触发。其中内存限制触发细分为:MemStore级别限制触发、Region级别限制触发、RegionServer级别限制触发。

  • 人为手动触发

    • 通过 shell 命令flush 'tablename'或者flush ‘regionname’分别对整表所有region和具体一个Region进行flush。
  • HBase定时触发

    • HBase提供自动刷写机制,到达自动刷写的时间,也会触发MemStore flush。自动刷新的时间间隔由hbase.regionserver.optionalcacheflushinterval(默认1小时)指定。需要注意的是,该机制处理是整个集群所有表的所有region,对生产读写,以及HDFS小文件等都有不利影响。如果设定为0,则关闭定时自动刷写。
  • HLog数量限制触发

    • 当WAL文件的数量超过hbase.regionserver.maxlogs,region会按照时间顺序依次进行刷写,直到WAL文件数量减小到该参数值以下(该属性名已经废弃,现无需手动设置,最大值为32)。
  • 其他事件触发

    • 在执行Region的合并、分裂、快照以及HFile的Compact等前会执行刷写。
  • MemStore级别内存限制触发

    • 当某个Region中任意一个MemStore达到hbase.hregion.memstore.flush.size参数值大小,就会触发该Region的刷写。
  • Region级别内存限制触发

    • 当某个Region中所有MemStore的大小加和达到了hbase.hregion.memstore.block.multiplier*hbase.hregion.memstore.flush.size 值大小,就会触发该Region的刷写。此时会阻塞入该 Region 的写请求,如果往 MemStore 写数据,会出现 RegionTooBusyException 异常。
  • RegionServer级别内存限制触发

    • 当某RegionServer种所有MemStore的大小加和达到了RegionServer全局低水位阈值java_heapsize *hbase.regionserver.global.memstore.size*hbase.regionserver.global.memstore.size.lower.limit 值大小,RegionServer会强制执行刷写,按序选择Region所有包含MemStore大小加和大的Region执行。于此相关的,如果此时数据写入吞吐量依然很大,导致该RegionServer种所有MemStore的大小加和超过该RegionServer全局水位阈值java_heapsize * hbase.regionserver.global.memstore.size 值大小,RegionServer会阻塞写请求,直到MemStore刷写大小将到低水位阈值。

手动触发事件_HBase中MemStore的刷写触发机制相关推荐

  1. oracle触发器 触发事件,oracle 触发器的种类和触发事件

    oracle触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器 触发器的种类和触发事件 触发器必须由事件才能触发.触发器的触发事件分可为3类,分别是DML事件.DDL事件和 ...

  2. html select 选中触发,实现select中指定option选中触发事件

    我们在用到下拉列表框select时,需要对选中的 选项触发事件,其实本身没有触发事件方法,我们只有在select里的onchange方法里触发. 当我们触发select的双击事件时,用ondblcli ...

  3. BMap.Polygon对象触发事件mouseover、mouseout有时不触发

    1.问题描述: 鼠标进入省份时经常无法触发事件,区域不能变量.有时鼠标在区域内移动,又会触发事件,区域变量或变浅 2.问题原因: 百度地图mouseover.mouseout事件监听BUG(接口/AP ...

  4. html资源加载前触发事件,jquery页面加载时触发ready()事件

    ready()事件类似于onLoad()事件,但前者只要页面的DOM结构加载后便触发,而后者必须在页面全部元素加载成功才触发,ready()可以写多个,按顺序执行.此外,下列写法是相等的: $(doc ...

  5. vue 前台文本修改触发事件_利用VBA代码禁用触发事件及对工作薄修改的保存方案...

    分享成果,随喜真能量.大家好,今日内容仍是和大家分享VBA编程中常用的简单"积木"过程代码,这些内容多是取至我的"VBA代码解决方案"教程中内容.NO.143- ...

  6. 实现 select中指定option选中触发事件

    实现 select中指定option选中触发事件 我们在用到下拉列表框select时,需要对选中的<option>选项触发事件,其实<option>本身没有触发事件方法,我们只 ...

  7. Cesium 事件详解(鼠标事件、相机事件、键盘事件、场景触发事件)

    Cesium 事件详解(鼠标事件.相机事件.键盘事件.场景触发事件) 1 Cesium中的事件 根据使用情况,我把Cesium中的事件大体分为三种,即屏幕空间事件处理程序,屏幕空间相机控制器,场景触发 ...

  8. oracle 触发器的种类和触发事件

    触发器的种类和触发事件   触发器必须由事件才能触发.触发器的触发事件分可为3类,分别是DML事件.DDL事件和数据库事件.  每类事件包含若干个事件,如下所示.数据库的事件是具体的,在创建触发器时要 ...

  9. 在C#中使用代理的方式触发事件

    事件(event)是一个非常重要的概念,我们的程序时刻都在触发和接收着各种事件:鼠标点击事件,键盘事件,以及处理操作系统的各种事件.所谓事件就是由某个对象发出的消息.比如用户按下了某个按钮,某个文件发 ...

  10. DataList中的按钮触发事件的方法的实现

    DataList中的按钮触发事件的方法的实现 1.要在CommandName中设定名字如:       <asp:Button id="Button1" runat=&quo ...

最新文章

  1. 数据治理(一):为什么要数据治理
  2. python真的好吗-python的缩进格式真的不好吗?
  3. C++ Stacks(堆栈)
  4. jQuery EasyUI Datagrid组件的完整的基础DOM结构
  5. codeforces gym-101755 D-Transfer Window 二分图匹配、递归
  6. TV3是马来西亚第一家商营电视台
  7. COSCon'20 Apache Roadshow- China 精彩收官 | 数据篇
  8. mysql o_Mysql数据类型
  9. CentOS7.6上搭建阿里云OSS的C SDK
  10. ROS二维码识别以及OKR使用
  11. c++11 日期和时间工具-(std::chrono::steady_clock)(std::chrono::high_resolution_clock)
  12. 微信文件夹的dat文件怎么打开_微信文件夹里的照片文件是DAT格式怎么才能打开?...
  13. git启动linux系统,gitlab 开机自动启动配置
  14. java.sql.SQLException: The connection property ‘zeroDateTimeBehavior‘ acceptable values are: ‘CONVER
  15. 多传感器融合算法,单目测距、基于双目,长焦短焦,图像拼接,环视等
  16. matlab中imag什么意思,Matlab基本函数-imag函数
  17. 超人气思维导图XMind新年新版本,这6个新功能你一定要看
  18. 创业布局移动端App,应该先做Android还是iOS?
  19. 检查linux中nginx是否已安装成功,linux服务下安装nginx 系统版本Ubuntu 18.04.4
  20. Traceback (most recent call last):异常

热门文章

  1. 随心所欲玩复制 详解robocopy (完)
  2. Group By和Order By的总结
  3. Android之Handler,举例说明如何更新UI
  4. 【UIKit】键盘设计2
  5. Hibernate级联删除时:Cannot delete or update a parent row: a foreign key constraint fails异常...
  6. 一个根据SortOrder控制排序的存储过程
  7. 29.Linux/Unix 系统编程手册(上) -- 线程:介绍
  8. 130.PHP的语言结构和函数的区别
  9. 13. Window blur() 方法
  10. Java获取http和https协议返回的json数据