Amoro性能调优
更新时间 2026-10-12 11:42:33
最近更新时间: 2026-10-12 11:42:33
本章节介绍Amoro性能调优。
Amoro 性能调优主要包括 AMS 服务、Catalog 配置、Iceberg表参数和 Optimizer 资源配置。AMS服务参数的调整需要通过修改配置文件并重启服务才能生效(可通过翼MR Manager中Amoro的配置管理页面进行操作),Catalog和OptimizerGroup 的配置可通过在WebUI页面上进行修改。建议调整前记录基线指标,并先在测试表或低风险业务域验证。
AMS服务参数
| 配置项 | 建议值 | 建议 |
|---|---|---|
| ams.server-expose-host | 修改为部署的机器 IP | 该 IP 为 Amoro Optimizer 注册时使用 |
| self-optimizing.full.trigger.interval | 86400000 | 触发Full 类型优化的周期(生效于所有AMS管理的表)。由于Full 类型优化合并耗时长,建议以天为单位进行合并 |
| table-expire.enabled | true | 是否开启表过期功能,开启后可以删除过期文件 |
| expire-snapshots.thread-count | 5 | 执行表快照过期的线程数,默认为 10。过期快照的执行频率不需要太高,建议适当缩小以节省资源 |
| clean-orphan-files.thread-count | 5 | 用于清理孤儿文件的线程数,默认是 10。该操作会占用 Amoro主机较大内存,一般情况下孤儿文件不会太多,可适当减少 |
| data-expiration.thread-count | 5 | 用于数据过期的线程数。由于数据过期一般不会太频繁,因此可适当减少该线程以节省资源 |
| data-expiration.interval | 6h | 每张表文件清理的周期,默认为1天。调小该参数可以使残留文件及时得到清理但会增大 Amoro主机以及底层存储(如HDFS)的压力 |
| refresh-tables.thread-count | 10 | 用于刷新从外部系统(比如 HiveMetastore)同步表的线程数。如果表多且变更频繁的话,可适当增大;增大可能会导致消耗更多 Amoro主机的内存 |
| ams.sync-hive-tables.enabled | false | 是否开启定期同步hive表功能 |
| ams.data-expiration.enabled | true | 是否开启定期数据过期功能 |
| database.connection-pool-max-wait-millis | 30000 | 用于设置数据库连接池最大等待时间,单位为毫秒 |
Catalog参数
针对Hive Catalog类型,建议在 Catalog 属性配置以下参数
| 配置项 | 建议值 | 建议 |
|---|---|---|
| clients | 20 | Hive Catalog 内访问 HiveMetaStore 的连接池大小,默认为2。考虑到Amoro 需要频繁访问 HMS 的服务,推荐改为20。 |
| database-filter | N/A | 数据库优化白名单,以正则表达式配置。对于 HiveMetaStore 内存在大量非 Iceberg 表的情况,推荐配置 database-filter,只关注可能存在 Iceberg 表的数据库,以减少对不需要 database 的频繁刷新。示例: testdb匹配testdb库所有表,testdb1|testdb2匹配testdb1和testdb2所包含的表。 |
| table-filter | N/A | 表优化白名单,以正则表达式配置。示例:testdb\..+匹配testdb库所有表,testdb\.ods.+匹配testdb库所有前缀为ods的表。 注:如需匹配名称中的.*+?|(){^$等特殊符号,需要在符号前加进行转义。 |
Iceberg表参数
表参数可针对单个Iceberg表设置Table properties,也可在catalog层次配置(会对该catalog下所有表生效)
| 配置项 | 默认值 | 建议值 |
|---|---|---|
| self-optimizing.max-task-size-bytes | 128mb | 256mb |
| self-optimizing.max-file-count | 10000 | 50000 |
| self-optimizing.full.trigger.interval | -1 | 14400000 |
| self-optimizing.full.rewrite-all-files | true | true |
| self-optimizing.min-plan-interval | 60000 | 300000 |
Optimizer Group 的配置参数
通用配置
| 配置项 | 建议值 | 建议 |
|---|---|---|
| max-input-file-size-per-thread | 1024mb | 在处理具有快速生成数据的表时,单个优化线程处理更少的文件可能会导致优化合并速度落后于表生成文件的速度。在优化的并发资源充足的情况下,增加单个优化线程处理的最大文件大小可以有效地解决这个问题。此配置默认为536870912(512MB)。生产环境下可按照目前表的平均大小和增长速度调整此配置值 |
Flink Optimizer Group
| 配置项 | 建议值 | 建议 |
|---|---|---|
| flink-conf.yarn.classpath.include-user-jar | DISABLED | 这两项建议统一配置,主要用于解决 Amoro 自带的 iceberg 版本和 $FLINK_HOME/lib 下的 Iceberg 版本不一致问题 |
| flink-conf.classloader.resolve-order | child-first | |
| flink-conf.taskmanager.memory.managed.size | 32mb | Flink 任务用以状态存储的内存开销,由于 Optimizer 不使用任何状态,故可以调小 |
| flink-conf.taskmanager.memory.network.max | 32mb | Flink 网络通讯的最大内存开销,由于 Optimizer 算子间网络开销非常小,故可以调小 |
| flink-conf.taskmanager.memory.network.min | 32mb | Flink 网络通讯的最小内存开销,由于 Optimizer 算子间网络开销非常小,故可以调小 |
SparkOptimizer Group
| 配置项 | 建议值 | 建议 |
|---|---|---|
| spark-conf.spark.driver.userClassPathFirst | true | Driver 里优先加载用户任务中的类,用以解决 Spark Optimizer 类冲突问题。 |
| spark-conf.spark.executor.userClassPathFirst | true | Executor 里优先加载用户任务重的类,用以解决 Spark Optimizer 类冲突问题。 |
调优排查顺序
1、区分瓶颈位于任务规划、任务等待、Optimizer 执行还是结果提交。
2、检查 pending tasks、executing tasks、Optimizer 实例数和线程数。
3、检查 HDFS/S3 吞吐、HMS 延迟、系统数据库和计算集群资源。
4、一次只调整一类参数,观察至少一个完整优化周期后再继续。