1. 背景

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

2. Compact_v1

2.1 程序输入

序号

参数名

参数含义

是否必选

备注

1

cluster

集群名


2

rsgroup

资源组


3

cmd

执行命令类型,支持

compact_server、compact_rsgroup、compact_table


4

parameter

对应cmd的参数,如果是compact_server则为具体的机器名,如果是compact_rsgroup则为具体的rsgroup,如果是compact_table,则为具体的table


5

batchSize

一次批量添加任务的大小


6

queueLimit

Major Compaction队列长度限制


7

mcInterval

Major Compaction时间间隔,单位毫秒


8

mcTaskExecutionTime

Major Compaction任务执行的时间,单位毫秒


9

execute

是否执行任务,如果为false,则仅输出执行计划


10

compactNum

执行Major Compaction的并发线程数


默认为1

2.2 程序流程图

2.2.1 总体流程图

hbase 国产化替代 hbase major_compact_hbase 国产化替代

 

2.2.2详细流程图

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

hbase 国产化替代 hbase major_compact_流程图_02

 

hbase 国产化替代 hbase major_compact_hbase 国产化替代_03

 

hbase 国产化替代 hbase major_compact_hbase 国产化替代_04

 

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

hbase 国产化替代 hbase major_compact_hbase_05

 

hbase 国产化替代 hbase major_compact_hbase 国产化替代_06

hbase 国产化替代 hbase major_compact_hbase 国产化替代_07

  

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

hbase 国产化替代 hbase major_compact_流程图_08

 

hbase 国产化替代 hbase major_compact_hbase 国产化替代_09

 

3 Compact

3.1 程序输入

序号

参数名

参数含义

是否必选

备注

1

cluster

集群名


2

rsgroup

资源组


3

cmd

执行命令类型,支持

compact_server、compact_rsgroup、compact_table


4

parameter

对应cmd的参数,如果是compact_server则为具体的机器名,如果是compact_rsgroup则为具体的rsgroup,如果是compact_table,则为具体的table


5

batchSize

一次批量添加任务的大小


6

queueLimit

Major Compaction队列长度限制


7

mcInterval

Major Compaction时间间隔,单位毫秒


8

mcTaskExecutionTime

Major Compaction任务执行的时间,单位毫秒


9

execute

是否执行任务,如果为false,则仅输出执行计划


3.2 程序流程图

3.2.1 总体流程图

hbase 国产化替代 hbase major_compact_数据库_10

 

3.2.2 详细流程图

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

hbase 国产化替代 hbase major_compact_hbase 国产化替代_11

 

hbase 国产化替代 hbase major_compact_hbase 国产化替代_12

 

hbase 国产化替代 hbase major_compact_大数据_13

 

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

hbase 国产化替代 hbase major_compact_hbase 国产化替代_14

hbase 国产化替代 hbase major_compact_大数据_15

 

hbase 国产化替代 hbase major_compact_hbase_16

 

hbase 国产化替代 hbase major_compact_hbase_17

 

 

4. 两个程序的区别

序号

区别

备注

1

compact_v1支持多线程对region执行compact,compact仅支持单线程

2

compact_v1生成plan的时候,对plan中的region进行排序,compact没有

3

compact_v1对plan队列的每个plan进行了排序,compact没有

4

sleep的时间不一样,compact_v1短一点

5. Compact程序线上问题分析

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

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

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

后续进展会在这里描述。