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 总体流程图
2.2.2详细流程图
图1是Compact_v1版本程序的详细流程图。
其中executePlan的流程图入图2所示:
ServerCompactBatchTask是集成了Callable<Boolean>的类,其中call方法的流程图如图3所示:
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 总体流程图
3.2.2 详细流程图
图4是Compact版本程序的总体流程图。
其中executePlan的方法的流程图如图5所示:
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的定时任务,通过增加日志的方式,每天查看任务运行状况。
后续进展会在这里描述。