内容纲要
概要描述
orc 事务表是一种 inceptor 中可以支持 CRUD 操作的的 ORC 表,其基本原理是对于每个 CRUD 操作(create,insert/merge into,update,delete,merge into),都会生成一个对应版本,当操作频繁时,会在 hdfs 产生大量小文件,为了避免小文件的危害(小文件危害参见 inceptor 小文件解决方案汇总),Inceptor 中设计了 compact 机制,对每个 orc 事务表进行 compact,将多个版本(小文件)合并成一个版本。
当满足 compact 条件,但是 compact 失败超过 3 次,会将该表加入 compact blacklist,后续不再 compact;
详细说明
本文介绍一下当 compact 失败时,如何手动实现 compact,并检测 compact 的进度情况,主要包括一下内容:
- 开启 orc 事务表的 compact 功能
- 提交 compact 任务
- 监控 compact 任务的执行情况
操作步骤
开启 compact 功能
ALTER TABLE table_name ENABLE COMPACT;
-- 开启表级别的 compact 功能
ALTER TABLE table_name PARTITION (partition_name) ENABLE COMPACT;
-- 开启单值分区级别的 compact 功能
ALTER TABLE table_name PARTITION range_partition_name ENABLE COMPACT;
-- 开启范围分区级别的 compact 功能
提交 compact 任务
-
异步提交 compact 任务,执行该命令,相当于在后台提交了compact请求,beeline或者waterdrop会立刻返回并显示提交成功。
alter table tableName compact 'major';
-
同步提交 compact 命令,在 beeline 或者 waterdrop 执行该命令后,会等到 compact 完成,或者失败才会结束。
alter table tableName compact 'major' and wait;
监控 compact 任务的执行情况
至于 compact 是否真正成功执行,需要通过 yarn resource manager 查看 yarn 上面 application 的日志,如下图所示:
点击 applicationID 进入查看;
附录1:compact 条件
Compact thread 后台自动做 compact,目前后台的 compact 触发条件是:
- 当系统中没有 base 版本时,则当 delta 版本数量大于
hive.compactor.delta.num.threshold
时触发 major compact - 当系统中有 base 版本时,则当所有 delta 版本的数据量达到base版本数据量的10%或者delta版本个数大于
hive.compactor.delta.num.threshold.without.base
时触发 major compact
这些触发条件都是可以配置的,分别对应于参数:
属性名 | 属性值 | 配置文件 |
---|---|---|
hive.compactor.delta.num.threshold.without.base | 50 | hive-site.xml |
hive.compactor.delta.num.threshold | 10 | hive-site.xml |
hive.compactor.delta.pct.threshold | 0.1 | hive-site.xml |
附录2:compact 资源调整
参考链接 YARN上compact作业任务失败