Spark spark.sql.autoBroadcastJoinThreshold为大于8G的HashedRelation创建RuntimeException

时间:2019-01-04 21:27:05

标签: apache-spark

我有一个火花作业,有时会因RuntimeException而失败

  

java.lang.RuntimeException:无法建立大于8G的HashedRelation

快速的Google搜索会显示source code

   if (neededNumWords > (1 << 30)) {
    throw new UnsupportedOperationException(
      "Can not build a HashedRelation that is larger than 8G")
  }

所以这似乎是一个硬性限制,而不是配置上的限制,但还有些侦探发现HashedRelations用于广播连接,而这正是我要失败的任务。

我目前在很多/更大/更大的数据集上执行相同的工作,因此我对为什么这可能是一个问题感到困惑,并且我看不到很多有用的阅读资料。我也找到了此设置:

spark.sql.autoBroadcastJoinThreshold,当前设置为4294967296(4GB)。错误消息中的4GB小于8GB,因此我不确定为什么会造成问题,但是可以通过将广播联接设置为-1来禁用广播联接。当我这样做时,我的工作就完成了。

我很乐意接受这个解决方案,但是我对为什么会有这个问题感到非常困惑,特别是为什么我的自动广播大小可能小于8gb,而我仍然出现故障,以及为什么我的更大的数据集在同一联接上成功执行。 HashedRelation是否分开?如果我对数据集进行更多分区,是否可以解决此问题?

这里的任何见解将不胜感激。

0 个答案:

没有答案