目录
一、问题描述
有一个dwd层中间表的入表任务,有几天的日期永远无法执行成功,平时的任务时间大概在2分钟。之前也遇到过一次这样的情况,是通过排查脏数据得到了解决(长字符串id中有不规则脏字符),这次实在没有头绪。
二、尝试调整参数
因为查看yarn任务的页面,发现总是报错在拒绝连接,看到有个别任务总是执行半天卡住,并且shuffle的records数量也明显高于其他exceutor,并且不仅spill到内存,甚至到了磁盘,说明还是数据倾斜。于是上网查找优化资料,陆续调整了几个参数:
--conf spark.shuffle.sort.bypassMergeThreshold=5000 (该参数应该是设置不合理,作用也不明显,后剔除)
--conf spark.reducer.maxSizeInFlight=256M
--conf spark.shuffle.file.buffer=96K
当加上第3个参数之后,任务不会那么快跑崩了,但最后还是存在问题。
也考虑在join的key上增加随机数前缀(2表关联,a表增加0-n随机数前缀,b表扩充随机数范围的n倍(0到n每个都作为前缀放到b表前,这样保证能和a表关联上)),但是任务sql较大,关联表过多,所以