【发布时间】:2020-03-24 07:18:06
【问题描述】:
在 spark 数据帧 (4x) 上执行几个连接时,出现以下错误:
org.apache.spark.shuffle.FetchFailedException: failed to allocate 16777216 byte(s) of direct memory (used: 4294967296, max: 4294967296)
即使在设置时:
--conf "spark.executor.extraJavaOptions-XX:MaxDirectMemorySize=4G" \
没有解决。
【问题讨论】:
-
我观察到的是:它在第二次加入时已经失败。我可以将第一个和第二个连接移动为广播连接。它工作得很好。对于第三和第四个 - 我仍然需要找到解决方案
-
将每个步骤写入磁盘(连接后的每个中间结果)时,它工作得很好。但这似乎是一个相当老套的解决方案,会产生额外的 IO
-
我也尝试广播第 3 次和第 4 次加入。在缓存的内存中,它的大小约为 11G。不幸的是,不知何故,我找不到合适的广播它。所以现在我需要求助于写入磁盘。然而,事实证明,这也不是在所有情况下都可靠。
标签: apache-spark apache-spark-sql jvm directmemory