任务内容:多个表union all 后对其中的一些表进行distmapjoin关联。任务线上经常报内存不够,以往处理基本是增加内存,内存到8192后则增加shard_count数量来减少内存使用,此种治标不治本的手段无法根治问题,仔细分析执行任务图发现,其中对应的加工逻辑有多个union all +distmapjoin,导致不合理的执行图如下:图中可以看出一份数据对应4次分发(主表有union all四份数据),个人分析一个distmapjoin对应多路分发不合理,合理应该分发一份,但个人无法处理,寻求平台人员:经测试此参数无效,平台人员给出另一参数。关键参数:
很多时候group by 操作是否必要有业务要求,但也应该关注数据量的变化,一般情况需要考虑指数级别的数量减少,另外优化需要结合着多种手段,此处增加事中重排,存储减少带来收益的同时,下游读表的资源也将大大减少。最后的最后,若表只是简单map操作,那就变成简单加工,就应该考虑干掉这个任务或者视图替代了。