orc 事务表手动 compact 介绍

  其他常见问题
内容纲要

概要描述

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 的进度情况,主要包括一下内容:

  1. 开启 orc 事务表的 compact 功能
  2. 提交 compact 任务
  3. 监控 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 任务
  1. 异步提交 compact 任务,执行该命令,相当于在后台提交了compact请求,beeline或者waterdrop会立刻返回并显示提交成功。

    alter table tableName compact 'major';
  2. 同步提交 compact 命令,在 beeline 或者 waterdrop 执行该命令后,会等到 compact 完成,或者失败才会结束。

    alter table tableName compact 'major' and wait;
监控 compact 任务的执行情况

至于 compact 是否真正成功执行,需要通过 yarn resource manager 查看 yarn 上面 application 的日志,如下图所示:

file

点击 applicationID 进入查看;

file

附录1:compact 条件

Compact thread 后台自动做 compact,目前后台的 compact 触发条件是:

  1. 当系统中没有 base 版本时,则当 delta 版本数量大于 hive.compactor.delta.num.threshold 时触发 major compact
  2. 当系统中有 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作业任务失败

这篇文章对您有帮助吗?

平均评分 5 / 5. 次数: 1

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。