Hbase Compaction 队列数量较大分析

目录

 

问题

问题原因分析

总结建议


问题

 前几天朋友公司Hbase集群出现Compaction队列持续处于比较大的情况,并且mem flush队列也比较大,一起看了下问题,大概情况如下图

从图中可以看出来压缩队列总和持续在1000-2000,平对压缩队列在200左右,刷新队列也比较高,当然压缩队列高的原因就是因为我们 MemStore Flush 比较频繁,导致写入的StoreFile数量增加,触发了Compcation。

问题原因分析

 

我们先说下什么情况下会触发Compaction

1.后台线程周期性检查:

multiplier=1000,chore定期执行,每隔 hbase.server.thread.wakefrequency=10秒 默认 10 * 1000,也就是每隔10s*1000=10000s=2.77小时,会执行一次

具体介绍可以参考:https://datamining.blog.csdn.net/article/details/104711339

2.MemStore Flush

触发时机可以参考:https://datamining.blog.csdn.net/article/details/82745205

3.手动触发

 

根据上面CDH的监控页面我们推测是MemStore Flush 刷新频繁导致的问题

查看Hbase集群相关信息

当前配置参数为:

hbase.hregion.memstore.flush.size = 512M
hbase.hregion.memstore.block.multiplier = 20
hbase.hstore.compactionThreshold (hbase.hstore.compaction.min) = 3
hbase.hstore.compaction.max = 10
hbase.hstore.blockingStoreFiles = 16
hbase.regionserver.global.memstore.size=0.4
hbase RegionServer 堆内存 16g

region个数为3000左右,平均每台服务器300个region左右 

这里介绍下参数的含义

配置参数默认值含义
hbase.hregion.memstore.flush.size128MMemStore达到该值会Flush成StoreFile
hbase.hregion.memstore.block.multiplier4当region中所有MemStore大小超过hbase.hregion.memstore.flush.size*hbase.hregion.memstore.block.multiplier服务则停止写入
hbase.hstore.compactionThreshold (hbase.hstore.compaction.min)3当一个 Store 中 HFile 文件数量超过该阈值就会触发一次 Compaction(Minor Compaction)
hbase.hstore.compaction.max10一次 Compaction 最多合并的 HFile 文件数量,超过该值的文件会被过滤掉,本次不做Compcation
hbase.hstore.blockingStoreFiles16一个 Store 中 HFile 文件数量达到该值就会阻塞写入,等待 Compaction 的完成
hbase.regionserver.global.memstore.size0.4

regionServer的全局memstore的大小,超过该大小会触发flush到磁盘的操作,默认是堆大小的40%,而且regionserver级别的flush会阻塞客户端读写

 

 

 

 

 

 

 

 

 

 

 

对不合理的参数进行修改,修改后配置为

hbase.hregion.memstore.flush.size = 256M
hbase.hregion.memstore.block.multiplier = 8
hbase.hstore.compactionThreshold (hbase.hstore.compaction.min) = 10
hbase.hstore.compaction.max = 20
hbase.hstore.blockingStoreFiles = 50
hbase RegionServer 堆内存 16g

hbase.hregion.memstore.flush.size

如果我们每个region写入数据都比较平均的话,当每个region的MemStore 大小达到  22M(下面有计算公式)就会触发RegionServer级别的Flush,所以集群中没有必要设置到512,我们改成256(其实改回默认128也不会影响)

16( RS JVM ) * 1024M * 0.4 / 300(region个数) ≈ 22 M 

hbase.hregion.memstore.block.multiplier 

该值是为了防止写入数据量过大导致服务停止写入,上面有解释,该值不宜设置过大,一般使用默认即可,这里我们暂时设置为8

hbase.hstore.compactionThreshold (hbase.hstore.compaction.min)

MemStore Flush 默认至少每一个小时会自动Flush一次数据(其他条件不满足,会系统自动flush),当StoreFile达到该值会触发Minor Compaction,线上我们可以调大该参数,这里设置为10

hbase.hstore.compaction.max

最大合并文件数量,我们设置为20,该值要比hbase.hstore.compactionThreshold大

hbase.hstore.blockingStoreFiles

一个Store中文件数量大于该值就停止写入,生产环境可以调整大一些,我们调整为50

 

重启服务,持续观察一段时间,看看效果如何

观察了一段时间,发现每次MemStore Flush 还是会导致队列很大

用工具看了下当前的Compaction压缩状态,查看下正在压缩的region,发现该region只有三个StoreFile就开始Compaction,再仔细一看正在执行的Compaction的Region都是在 hbase.hregion.majorcompaction 时间范围内。

 

去看了下配置,MajorCompaction的确没有关闭,实际生产环境我们可以根据每个Region下的StoreFile数量、大小,自行进行判断何时执行MajorCompaction,设置为手动就可以,能更灵活的运用服务器,将 hbase.hregion.majorcompaction 设置为 0 ,等待一段时间观察效果

 

总结建议

1.合理的控制MemStoreFlush频率

2.合理的进行表的预分区,提前进行数据量预估,减少表的分裂(在某些特定的业务下,可以禁止Region分裂,比如该表的数据大小我们可以预估出来)

3.尽量手动执行MajorCompaction

4.Region个数不宜太多

最佳数量:((RS memory) * (total memstore fraction)) / ((memstore size)*(# column families))  =16 *1024 * 0.4 /(256*1)= 25.6

实际使用,我们一般不会用这么少,我们公司配置是32G,管理着400Region左右,目前来看没什么影响

Hbase Compaction 源码分析 - CompactionChecker:https://datamining.blog.csdn.net/article/details/104711339

Hbase Memstore刷新方式与Region的数目上限:https://datamining.blog.csdn.net/article/details/82745205

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中Date和DateFormat、SimpleDateFormat类

package com.test;import java.text.DateFormat; import java.util.Date; import java.util.Random; import java.util.UUID; import java.util.concurrent.ThreadLocalRandom;public class M1001{public static void main(String[] args) {//Date表示特定的瞬间,精确到毫秒Dat…

Hbase 2.x Region in transition (永久RIT) 异常解决

环境 Hbase 版本:2.0 问题原因 hbase长时间出现RIT,并且发生RIT的Region是已经删除了的Hbase表,表未删除的情况下执行assgin可以消除该问题 Hbase Region in transition (RIT) 异常解决:https://datamining.blog.csdn.net/artic…

sigslot库源码分析

言归正传,sigslot是一个用标准C语法实现的信号与槽机制的函数库,类型和线程安全。提到信号与槽机制,恐怕最容易想到的就是大名鼎鼎的Qt所支持的对象之间通信的模式吧。不过这里的信号与槽虽然在概念上等价与Qt所实现的信号与槽,但…

Mysql for linux 安装

Mysql for linux 安装: 第一步,参考这个链接至第四步为止 https://jingyan.baidu.com/article/cd4c2979209c32756e6e60e1.html 第二步:使用rpm -qa | grep mysql 查询安装状态 第三步:使用/etc/rc.d/init.d/mysqld status 检…

Hue开发指南 - 提交 Spark 程序

目录 Hue开发指南 1.Spark文件打包成一个Jar包提交Hue运行 1.1 上传Spark Jar包至HDFS文件系统 1.2.Hue中创建Spark任务 2.多jar包导入执行(依赖jar包与主程序jar包分开打包) 2.1 修改worksapce 2.2 添加程序依赖jar包 Hue开发指南 Hue是面向 Had…

如何缩小码农和高手的差距

为什么同样的时间有的人可以漂亮的完成工作,而有些人废了很大的力气也没有完成?前者我们常常称之为“大牛”,后者我们常常叫他们“菜鸟”。当然“大牛”都是相对而言的,“大牛”也不可能方方面面都非常厉害,换句话说大…

OpenResty 安装,收集日志保存到文本文件

目录 安装 1.安装相关类库 2.安装编译openresty 3.编写配置启动openresty服务 4.通过 openresty 保存日志数据到系统 安装 1.安装相关类库 yum install -y readline-devel pcre-devel openssl-devel gcc 2.安装编译openresty wget https://openresty.org/download/open…

暗时间-领悟

作者:排长链接:https://www.zhihu.com/question/20689852/answer/23227406来源:知乎著作权归作者所有,转载请联系作者获得授权。第一次看到“暗时间”这个词,我的第一反应是有点不屑,又是一个概念噱头吧。直…

Openresty Nginx 负载均衡

目录 OpenResty Openresty 服务配置文件 启动Openresty服务 测试调用接口 Nginx 负载均衡服务 nginx 配置文件 启动服务 实现功能 测试结果 这里实现个简单的负载均衡,只做功能展示(实际业务比这复杂高,单台服务器无法满足需求的情况…

总结--美丽的敷衍

我看新年 转眼间,2015已经悄然离去,正像2015年刚来时候感叹2014的白驹过隙。年年岁岁花相似,岁岁年年人不同。时间过去了,自己又有如何的不同呢?客观的说,这一年有了一定的长进,但总感觉失去/错…

Hadoop Yarn REST API未授权漏洞利用挖矿分析

目录 一、背景情况 二、 漏洞说明 攻击步骤: 三、入侵分析 四、安全建议 清理病毒 安全加固 五、IOCs 一、背景情况 5月5日腾讯云安全曾针对攻击者利用Hadoop Yarn资源管理系统REST API未授权漏洞对服务器进行攻击,攻击者可以在未授权的情况…

读书-悟

作者:梅芳growing链接:https://www.zhihu.com/question/20689852/answer/95018631来源:知乎著作权归作者所有,转载请联系作者获得授权。《暗时间》这本书,我读过3遍,第一便是在大三时,第二遍是用…

Linux shell编程学习总结

主要内容&#xff1a; shell编程sed命令awk命令crontab定时器 什么是Shell&#xff1f; Shell是用户与内核进行交互操作的一种接口&#xff0c;目前最流行的Shell称为bash Shell Shell也是一门编程语言<解释型的编程语言>&#xff0c;即shell脚本 一个系统可以存在多…

Flink ProcessFunction 介绍使用

目录 实现功能 代码 测试 问题 官网描述&#xff1a;https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/operators/process_function.html The ProcessFunction is a low-level stream processing operation, giving access to the basic build…

Flink keyby 数据倾斜问题处理

上一篇我们使用keyby后发现数据严重倾斜 https://datamining.blog.csdn.net/article/details/105316728 大概看下问题所在&#xff0c;大量数据在一个subtask中运行 这里我们使用两阶段keyby 解决该问题 之前的问题如下图所示 我们期望的是 但我们的需要根据key进行聚合统计&a…

java中正则表达式

package com.test;import java.util.Scanner;public class M1001{public static void main(String[] args) {String input null;Scanner sc new Scanner(System.in);while(sc.hasNext()){inputsc.nextLine();String regex "^1[3|4|5|7|8][0-9]{9}$";//为表达式模板…

读书-时间(反思)

每一天的时间都非常多&#xff0c;下班以后的时间&#xff0c;周末闲暇的时间&#xff0c;但是时间这么多&#xff0c;自己往往不知道该拿它来干什么&#xff0c;每天下完班以后&#xff0c;回到家&#xff0c;打开电脑&#xff0c;打开手机&#xff0c;首先看一看QQ&#xff0…

Kafka 优化参数 unclean.leader.election.enable

Kafka 某个节点挂掉&#xff0c;导致整个服务异常&#xff0c;为了保证服务容灾&#xff0c;可对下面几个参数进行调整 unclean.leader.election.enabletrue min.insync.replicas1 offsets.topic.replication.factor3 这三个配置什么意思呢? 依次来看一下&#xff1a; unclean…

linux中iptables对防火墙的操作

Iptables教程 1. iptables防火墙简介 Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具&#xff0c;它的功能十分强大&#xff0c;使用非常灵活&#xff0c;可以对流入、流出、流经服务器的数据包进行精细的控制。iptables是Linux2.4及2.6内核中…