内存调优
1、DAGAppMaster 内存:任务数很多的超大 DAG(如顶点并行度上万)需适当调大 tez.am.resource.memory.mb,并同步调整 tez.am.launch.cmd-opts 中的 -Xmx;
2、任务堆内存:任务实际堆内存由容器内存与 tez.container.max.java.heap.fraction(默认0.8)共同决定,避免直接把 -Xmx 设得超过容器内存导致被 YARN 杀掉;
3、排序缓冲区:tez.runtime.io.sort.mb 越大溢写次数越少,建议不超过容器内存的一半,结合计数器中的 spilled records 观察调整。
容器重用
容器重用(tez.am.container.reuse.enabled,默认开启)让同一 Container 顺序执行多个 Task,减少容器启停与 JVM 冷启动开销,是 Tez 相对 MapReduce 的主要性能优势之一。
1、默认策略优先复用同节点容器,其次允许机架内降级(tez.am.container.reuse.rack-fallback.enabled);
2、数据本地性差、网络成为瓶颈时,可评估开启 tez.am.container.reuse.non-local-fallback.enabled,用本地性换并行度。
任务并行度
1、顶点并行度主要由输入分片数与上游组件决定,小文件过多会带来大量小任务,建议上游合并小文件;
2、任务数过大时 AM 调度压力增加,可结合 tez.am.resource.memory.mb 与队列资源评估上限;
3、任务数过小时并行度不足,可参考 tez.grouping.min-size、tez.grouping.max-size 控制输入分组大小。
常见调优建议
1、合理设置队列资源,避免作业长时间排队;
2、通过 TezUI 的计数器(如 spilled records、GC 时间)定位内存压力与慢任务;
3、重负载作业与轻负载作业分队列运行,避免相互影响;
4、本地模式(tez.local.mode=true)仅用于小数据量功能验证,生产环境不要开启。