作者:开七
一、前言
MaxCompute 优化是一个多样而又重要的过程,优化过程中若能够深入理解 ODPS 的工作原理和内部机制,才能够更明确的发现运行过程中存在的问题,这样才能更有针对性地进行优化,优化需要不断思考和尝试不同的想法和方法,适当的时候我们可以寻求平台技术人员帮助,以找到最适合的优化方案。
以下通过日常几个优化案例,最终优化手段可能非常简单,但其中的分析过程较为重要,希望对他人有所启发。
二、dmj 针对多 union 的一种优化
任务内容:多个表 union all 后对其中的一些表进行 distmapjoin 关联。
任务线上经常报内存不够,以往处理基本是增加内存,内存到 8192 后则增加 shard_count 数量来减少内存使用,此种治标不治本的手段无法根治问题,仔细分析执行任务图发现,其中对应的加工逻辑有多个 union all +distmapjoin,导致不合理的执行图如下:
图中可以看出一份数据对应 4 次分发(主表有 union all 四份数据),个人分析一个 distmapjoin 对应多路分发不合理,合理应该分发一份,但个人无法处理,寻求平台人员: