手动触发事件_HBase中MemStore的刷写触发机制
因为HBase的数据存储使用的是HDFS,而HDFS是不支持随机读写的,所以HBase的数据写入采用LSM算法。LSM算法一般会分内存和磁盘两部分存放数据,在HBase的实现中,内存部分称作MemStore,采用的是跳跃表实现,维护了一个有序的KeyValue集合,磁盘部分有0到多个内部KeyValue有序的HFile文件组成。这些HFile文件,就是一些机制的触发下,将内存中MemStore数据刷写到磁盘形成的(其中,有些HFile文件是通过一些小的HFile文件采用多路归并算法合并形成)。
![](/assets/blank.gif)
如上图,一台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。
- 通过 shell 命令
- HBase定时触发
- HBase提供自动刷写机制,到达自动刷写的时间,也会触发MemStore flush。自动刷新的时间间隔由
hbase.regionserver.optionalcacheflushinterval(默认1小时)
指定。需要注意的是,该机制处理是整个集群所有表的所有region,对生产读写,以及HDFS小文件等都有不利影响。如果设定为0,则关闭定时自动刷写。
- HBase提供自动刷写机制,到达自动刷写的时间,也会触发MemStore flush。自动刷新的时间间隔由
- HLog数量限制触发
- 当WAL文件的数量超过
hbase.regionserver.maxlogs
,region会按照时间顺序依次进行刷写,直到WAL文件数量减小到该参数值以下(该属性名已经废弃,现无需手动设置,最大值为32)。
- 当WAL文件的数量超过
- 其他事件触发
- 在执行Region的合并、分裂、快照以及HFile的Compact等前会执行刷写。
- MemStore级别内存限制触发
- 当某个Region中任意一个MemStore达到
hbase.hregion.memstore.flush.size
参数值大小,就会触发该Region的刷写。
- 当某个Region中任意一个MemStore达到
- Region级别内存限制触发
- 当某个Region中所有MemStore的大小加和达到了
hbase.hregion.memstore.block.multiplier*hbase.hregion.memstore.flush.size
值大小,就会触发该Region的刷写。此时会阻塞入该 Region 的写请求,如果往 MemStore 写数据,会出现RegionTooBusyException
异常。
- 当某个Region中所有MemStore的大小加和达到了
- 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刷写大小将到低水位阈值。
- 当某RegionServer种所有MemStore的大小加和达到了RegionServer全局低水位阈值
手动触发事件_HBase中MemStore的刷写触发机制相关推荐
- oracle触发器 触发事件,oracle 触发器的种类和触发事件
oracle触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器 触发器的种类和触发事件 触发器必须由事件才能触发.触发器的触发事件分可为3类,分别是DML事件.DDL事件和 ...
- html select 选中触发,实现select中指定option选中触发事件
我们在用到下拉列表框select时,需要对选中的 选项触发事件,其实本身没有触发事件方法,我们只有在select里的onchange方法里触发. 当我们触发select的双击事件时,用ondblcli ...
- BMap.Polygon对象触发事件mouseover、mouseout有时不触发
1.问题描述: 鼠标进入省份时经常无法触发事件,区域不能变量.有时鼠标在区域内移动,又会触发事件,区域变量或变浅 2.问题原因: 百度地图mouseover.mouseout事件监听BUG(接口/AP ...
- html资源加载前触发事件,jquery页面加载时触发ready()事件
ready()事件类似于onLoad()事件,但前者只要页面的DOM结构加载后便触发,而后者必须在页面全部元素加载成功才触发,ready()可以写多个,按顺序执行.此外,下列写法是相等的: $(doc ...
- vue 前台文本修改触发事件_利用VBA代码禁用触发事件及对工作薄修改的保存方案...
分享成果,随喜真能量.大家好,今日内容仍是和大家分享VBA编程中常用的简单"积木"过程代码,这些内容多是取至我的"VBA代码解决方案"教程中内容.NO.143- ...
- 实现 select中指定option选中触发事件
实现 select中指定option选中触发事件 我们在用到下拉列表框select时,需要对选中的<option>选项触发事件,其实<option>本身没有触发事件方法,我们只 ...
- Cesium 事件详解(鼠标事件、相机事件、键盘事件、场景触发事件)
Cesium 事件详解(鼠标事件.相机事件.键盘事件.场景触发事件) 1 Cesium中的事件 根据使用情况,我把Cesium中的事件大体分为三种,即屏幕空间事件处理程序,屏幕空间相机控制器,场景触发 ...
- oracle 触发器的种类和触发事件
触发器的种类和触发事件 触发器必须由事件才能触发.触发器的触发事件分可为3类,分别是DML事件.DDL事件和数据库事件. 每类事件包含若干个事件,如下所示.数据库的事件是具体的,在创建触发器时要 ...
- 在C#中使用代理的方式触发事件
事件(event)是一个非常重要的概念,我们的程序时刻都在触发和接收着各种事件:鼠标点击事件,键盘事件,以及处理操作系统的各种事件.所谓事件就是由某个对象发出的消息.比如用户按下了某个按钮,某个文件发 ...
- DataList中的按钮触发事件的方法的实现
DataList中的按钮触发事件的方法的实现 1.要在CommandName中设定名字如: <asp:Button id="Button1" runat=&quo ...
最新文章
- 数据治理(一):为什么要数据治理
- python真的好吗-python的缩进格式真的不好吗?
- C++ Stacks(堆栈)
- jQuery EasyUI Datagrid组件的完整的基础DOM结构
- codeforces gym-101755 D-Transfer Window 二分图匹配、递归
- TV3是马来西亚第一家商营电视台
- COSCon'20 Apache Roadshow- China 精彩收官 | 数据篇
- mysql o_Mysql数据类型
- CentOS7.6上搭建阿里云OSS的C SDK
- ROS二维码识别以及OKR使用
- c++11 日期和时间工具-(std::chrono::steady_clock)(std::chrono::high_resolution_clock)
- 微信文件夹的dat文件怎么打开_微信文件夹里的照片文件是DAT格式怎么才能打开?...
- git启动linux系统,gitlab 开机自动启动配置
- java.sql.SQLException: The connection property ‘zeroDateTimeBehavior‘ acceptable values are: ‘CONVER
- 多传感器融合算法,单目测距、基于双目,长焦短焦,图像拼接,环视等
- matlab中imag什么意思,Matlab基本函数-imag函数
- 超人气思维导图XMind新年新版本,这6个新功能你一定要看
- 创业布局移动端App,应该先做Android还是iOS?
- 检查linux中nginx是否已安装成功,linux服务下安装nginx 系统版本Ubuntu 18.04.4
- Traceback (most recent call last):异常
热门文章
- 随心所欲玩复制 详解robocopy (完)
- Group By和Order By的总结
- Android之Handler,举例说明如何更新UI
- 【UIKit】键盘设计2
- Hibernate级联删除时:Cannot delete or update a parent row: a foreign key constraint fails异常...
- 一个根据SortOrder控制排序的存储过程
- 29.Linux/Unix 系统编程手册(上) -- 线程:介绍
- 130.PHP的语言结构和函数的区别
- 13. Window blur() 方法
- Java获取http和https协议返回的json数据