更新时间:2022-11-09 GMT+08:00
SQL作业中存在join操作,因为自动广播导致内存不足,作业一直运行中
问题现象
SQL作业中存在join操作,作业提交后状态一直是运行中,没有结果返回。
问题根因
Spark SQL作业存在join小表操作时,会触发自动广播所有executor,使得join快速完成。但同时该操作会增加executor的内存消耗,如果executor内存不够时,导致作业运行失败。
解决措施
- 排查执行的SQL中是否有使用“/*+ BROADCAST(u) */”强制做broadcastjoin。如果有,则需要去掉该标识。
- 设置spark.sql.autoBroadcastJoinThreshold=-1,具体操作如下:
- 登录DLI管理控制台,单击“作业管理 > SQL作业”,在对应报错作业的“操作”列,单击“编辑”进入到SQL编辑器页面。
- 单击“设置”,在参数设置中选择“spark.sql.autoBroadcastJoinThreshold”参数,其值设置为“-1”。
- 重新单击“执行”,运行该作业,观察作业运行结果。
父主题: 运维指导