当前位置: 首页 > news >正文

Hbase -- Compact工具梳理

1. 背景

当前,线上HBase集群的自动Major Compact是关闭的,我们选择在凌晨业务空闲的时候进行手动触发Major Compact,Compact工具就是在运维平台上对资源组、RS、表进行Major Compact。目前线上有2种版本的Compact程序:Compact_v1和Compact,Compact_v1是基于Compact做了部分优化。在实际运行中,也发现有部分Compact任务运行失败,并且该工具目前处于无人运维的状态。本文对该工具从输入、代码流程、使用方法进行说明,并且后续会持续对该文档进行补充,增加线上运行失败的原因分析和改进。

2. Compact_v1

2.1 程序输入

序号参数名参数含义是否必选备注
1cluster集群名
2rsgroup资源组
3cmd执行命令类型,支持

compact_server、compact_rsgroup、compact_table

4parameter对应cmd的参数,如果是compact_server则为具体的机器名,如果是compact_rsgroup则为具体的rsgroup,如果是compact_table,则为具体的table
5batchSize一次批量添加任务的大小
6queueLimitMajor Compaction队列长度限制
7mcIntervalMajor Compaction时间间隔,单位毫秒
8mcTaskExecutionTimeMajor Compaction任务执行的时间,单位毫秒
9execute是否执行任务,如果为false,则仅输出执行计划
10compactNum执行Major Compaction的并发线程数默认为1

2.2 程序流程图

2.2.1 总体流程图

 

2.2.2详细流程图

图1是Compact_v1版本程序的详细流程图。

 

 

 

其中executePlan的流程图入图2所示:

 

  

ServerCompactBatchTask是集成了Callable<Boolean>的类,其中call方法的流程图如图3所示:

 

 

3 Compact

3.1 程序输入

序号

参数名

参数含义

是否必选

备注

1cluster集群名
2rsgroup资源组
3cmd执行命令类型,支持

compact_server、compact_rsgroup、compact_table

4parameter对应cmd的参数,如果是compact_server则为具体的机器名,如果是compact_rsgroup则为具体的rsgroup,如果是compact_table,则为具体的table
5batchSize一次批量添加任务的大小
6queueLimitMajor Compaction队列长度限制
7mcIntervalMajor Compaction时间间隔,单位毫秒
8mcTaskExecutionTimeMajor Compaction任务执行的时间,单位毫秒
9execute是否执行任务,如果为false,则仅输出执行计划

3.2 程序流程图

3.2.1 总体流程图

 

3.2.2 详细流程图

图4是Compact版本程序的总体流程图。

 

 

 

其中executePlan的方法的流程图如图5所示:

 

 

 

 

4. 两个程序的区别

序号区别备注
1compact_v1支持多线程对region执行compact,compact仅支持单线程
2compact_v1生成plan的时候,对plan中的region进行排序,compact没有
3compact_v1对plan队列的每个plan进行了排序,compact没有
4sleep的时间不一样,compact_v1短一点

5. Compact程序线上问题分析

目前线上因为Compact_v1有失败的,所以已经将所有的Compact_v1改为Compact任务。

通过查看代码,可以看到Compact_v1是基于Compact做了多个优化,包括可以多线程执行Compact、Region合并按照优先级的顺序执行,各台机器的Compact也是按照优先级排序 ,所以建议采用Compact_v1的代码。

线上执行Compact_v1有失败的问题,查看了运行日志,失败基本都是超时导致,没有打印出程序运行日志,所以目前先配置了几个Compact_v1的定时任务,通过增加日志的方式,每天查看任务运行状况。

后续进展会在这里描述。

http://www.lryc.cn/news/23460.html

相关文章:

  • 【java代码审计】SQL注入
  • 前置知识-辛 Runge-Kutta 方法
  • require 与 import 两种引入模块方式到底有什么区别?
  • 软考信息系统监理师备考建议
  • 第八届蓝桥杯省赛——4承压计算(二维数组,嵌套循环)
  • 【ECNU】3645. 莫干山奇遇(C++)
  • 为什么需要学习shell、shell的作用
  • pgsql-Create_ALTER_GRANT_REVOKE命令语法
  • 【linux】:进程概念
  • 创建对象的方式和对属性的操作
  • GO时间相关操作说明
  • 选择和分支结构
  • Elasticsearch总结笔记
  • Ubuntu 安装指定版本 Mysql,并设置远程连接(以安装mysql 5.5 为例)
  • NumPy:Python中的强大数学工具
  • Hbase资源隔离操作指南
  • TPS2012B泰克Tektronix隔离通道示波器
  • 9.4 PIM-DM
  • 程序员推荐的良心网站合集!
  • 信息安全概论之《密码编码学与网络安全----原理与实践(第八版)》
  • 跬智信息全新推出云原生数据底座玄武,助力国产化数据服务再次升级
  • 【离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载】
  • 我的十年编程路 序
  • xs 180
  • 时间序列分析 | BiLSTM双向长短期记忆神经网络时间序列预测(Matlab完整程序)
  • 0101基础-认证授权-springsecurity
  • 一文简单了解THD布局要求
  • [C++]多态
  • 中国版ChatGPT高潮即将到来,解密ChatGPT底层网络架构
  • PingCAP 唐刘:一个咨询顾问对 TiDB Chat2Query Demo 提出的脑洞