HBase之HRegionServer处理put请求
我们知道客户端是通过MultiServerCallable.call()调用multi()来进行RPC请求的。
1 RegionServer在接受到客户端写请求后,首先反序列化PUT对象,然后判断操作是否是原子性的,如果不是原子性的则调用doNonAtomicRegionMutatiOn操作
2 获取PUT请求中的row key,family,以及qualifier等信息
3 检查RegionServer上MemStore是否超过当前堆内存使用率的百分比,默认是0.4,你也可以通过hbase.regionserver.global.memstore.upper
Limit去配置;如果超过限制则唤醒Flush线程把当前占用内存最大的memstores,直到低于最低限制,参考参数hbase.regionserver.global.
memstore.lowerLimit
4 然后检查Region是否只读,检查当前Region的MemStore是否大于blockingMemStoreSize=(hbase.hregion.memstore.flush.size* hbase.
hregion.memstore.block.multiplier) ,如果大于则进行flush操作,释放内存
注意:
hbase.hregion.memstore.flush.size: 默认大小128M
hbase.hregion.memstore.block.multiplier: 默认倍数2倍
我们考虑一种情况,理想情况memstore达到128M时,就该刷新到StoreFile但是,这时候MemStore的数据是127M,然后下一个请求写的数据是100M,这时候MemStore会涨到会涨到228M > 128M,那么发生OOM的风险就增大了,所以HBase就让MemStore现在实际大小 超过默认hbase.hregion.memstore.block.multiplier倍时就暂时block该Region 的请求,然后进行flush,释放内存。
这两个参数的设置需要进行综合权衡,因为一旦flush了之后,就有可能发生compact、split操作,这时候是比较耗时的,可能达到十几秒之类的,如果是online应用是不可接受,我们可以适当增加hbase.hregion.memstore.block.multiplier这个倍数,然后内存不够用的话,还可以加内存。
以上步骤完成则正式进入写核心的写流程:
5 构造WALEdit
6 获取行锁,锁定row,如果之前还有事务未结束,等待之前的事务结束,获取Region更新锁,防止多个请求同时更新Region
7 从MultiVersionConsistencyControl(MVCC)获取一个Write Number,
主要用于HBase的在并发情况下的写一致性的前提下,保证高性能读取;构造一个往MemStore写的入口类WriteEntry
8 从PUT请求中获取<family,cell>映射,然后检查family,更新这次请求的时间戳,并设置到这次请求中,然后把这个操作放到一个集合中
9 遍历PUT操作的集合,获取每一个单元格,然后将其添加到WALEdit
10 遍历PUT操作集合,遍历每一个单元格,然后将其写入MemStore
11 遍历WALEdit,将日志添加到HLog中
12 释放Region更新锁和行锁
13 同步这WALEdit
14 最后会检查MemStore是否应该flush,如果满足flush条件,则进行flush操作
HBase之HRegionServer处理put请求相关推荐
- linux无法启动hbase密码,linux – 无法在请求的2181端口启动ZK,而导出HBASE_MANAGES_ZK = false...
问题 第一个目标是独立运行HBase. HBase启动后,导航到ip:60010 / master-status是成功的. 第二个目标是运行一个独特的ZooKeeper仲裁. ZooKeeper已下载 ...
- 启动hbase后hregionserver没有启动
log路径是: /home/appleyuchi/bigdata/hbase-2.2.4/logs 根据log来排错
- Linux环境HBase安装配置及使用
Linux环境HBase安装配置及使用 1. 认识HBase (1) HBase介绍 HBase = Hadoop database,Hadoop数据库 开源数据库 官网:hbase.apache.o ...
- HBase源代码分析之MemStore的flush发起时机、推断条件等详情(二)
在<HBase源代码分析之MemStore的flush发起时机.推断条件等详情>一文中,我们具体介绍了MemStore flush的发起时机.推断条件等详情.主要是两类操作.一是会引起Me ...
- hbase 租约超时及rpc超时出现的问题
随着数据量的增大,HIVE查询HBase的时候又出现了scan数据缓慢的问题,在HBase regionserver的log中出现了如下错误: [plain] view plaincopy org.a ...
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...
- HBase:分布式列式NoSQL数据库
传统的ACID数据库,可扩展性上受到了巨大的挑战.而HBase这类系统,兼具可扩展性的同时,也提出了类SQL的接口. HBase架构组成 HBase采用Master/Slave架构搭建集群,它隶属于H ...
- Hbase Compaction 源码分析 - CompactionChecker
其他相关文章 Hbase Compaction 源码分析 - CompactionChecker Hbase Compaction 源码分析 - RatioBasedCompactionPolicy ...
- hbase 页面访问_HBase
HBase 特点 海量存储 Hbase 适合存储 PB 级别的海量数据,在 PB 级别的数据以及采用廉价 PC 存储的情况下, 能在几十到百毫秒内返回数据.这与 Hbase 的极易扩展性息息相关.正式 ...
最新文章
- php mysql orm_PHP ORM操作MySQL数据库
- mysql 分区表优化_Sql优化之Mysql表分区
- Scrapy -- 05
- (二)html5中的属性
- javaone_Javaone 2013评论
- C语言switch中break的作用,C语言中switch...case语句中break的重要性
- maven+SSM框架工程搭建
- chrome 控制台 base64加密解密
- 圆柱与平面接触宽度_好烦!这个建筑高大斜圆柱真难施工!别怕!学会这种工法就不难了...
- xlrd,xlwt操作Excel实例
- 2. jQuery 语法
- 廖雪峰Python教程练习题
- 数据恢复 FinalData 3.0 testdisk
- Python库 Pandas 安装失败解决方案
- 两种求矩阵伪逆的方法
- 离散信号(八)| 离散傅里叶变换DFT性质(圆周移位、圆周卷积)
- EasyPlayer播放H.265的HLS视频流出现加载异常的问题分析及解决方法
- 【死磕 Spring】----- IOC 之 Factory 实例化 bean
- ORACLE错误代码对照表
- 清晰理解红黑树的演变-红黑的含义
热门文章
- python垃圾回收 循环引用_在做 Python 循环引用垃圾回收实验中的一个小问题, Python3 的 print 是线程安全的吗?...
- mysql 取substring_如何在MySQL中的字段上应用Substring()以获取字符串的一部分?
- 第八篇:稳定性之提升团队潜意识【及时复盘、开关设计】
- 七阶拉丁方阵_【C语言】输出N阶拉丁方阵并统计个数
- 社区儿童计算机活动总结,寒假社区服务活动总结
- color-loss pytorch实现
- tiny服务器系列,项目:TinyHTTP服务器
- matlab 32和64,在32或64位matlab上运行?
- rtsp服务器如何低延时linux,web实现RTSP无插件低延迟播放方案整理
- 计算机系统高级设置在哪里,Win7系统高级设置在哪里