文档首页/ 数据湖探索 DLI/ 常见问题/ SQL作业相关问题/ 运维指导/ SQL作业中存在join操作,因为自动广播导致内存不足,作业一直运行中
更新时间:2022-11-09 GMT+08:00

SQL作业中存在join操作,因为自动广播导致内存不足,作业一直运行中

问题现象

SQL作业中存在join操作,作业提交后状态一直是运行中,没有结果返回。

问题根因

Spark SQL作业存在join小表操作时,会触发自动广播所有executor,使得join快速完成。但同时该操作会增加executor的内存消耗,如果executor内存不够时,导致作业运行失败。

解决措施

  1. 排查执行的SQL中是否有使用“/*+ BROADCAST(u) */”强制做broadcastjoin。如果有,则需要去掉该标识。
  2. 设置spark.sql.autoBroadcastJoinThreshold=-1,具体操作如下:
    1. 登录DLI管理控制台,单击“作业管理 > SQL作业”,在对应报错作业的“操作”列,单击“编辑”进入到SQL编辑器页面。
    2. 单击“设置”,在参数设置中选择“spark.sql.autoBroadcastJoinThreshold”参数,其值设置为“-1”。
    3. 重新单击“执行”,运行该作业,观察作业运行结果。