火花工作陷入99%并且没有继续

时间:2017-11-13 19:24:47

标签: apache-spark apache-spark-sql

我有一个基本的火花工作,可以做几个连接。加入的3个数据框有点大,每个数据库都有近20亿条记录。我有一个Spark基础设施,可以在必要时自动扩展节点。这似乎是一个非常简单的spark SQL查询,其结果我写入磁盘。但是当我从 Spark UI 看一下时,这份工作总是停留在99%。

我尝试过的一些事情是:

  • 增加executorsexecutor memory
  • 的数量
  • 在编写文件时使用repartition
  • 使用原生点火join代替spark SQL join

然而,这些都没有奏效。如果有人可以分享解决这个问题的经验,那就太好了。提前谢谢。

1 个答案:

答案 0 :(得分:2)

由于连接操作,具有相同键的所有记录都被拖放到同一个执行程序。如果数据偏斜,这意味着有一个或几个键在行数方面占主导地位。然后这个单一的执行器必须处理所有这些行。基本上你的Spark作业变成单线程,因为这个单一的密钥需要由一个线程处理。

重新分区无效,因为您的加入操作将通过散列连接键再次对数据进行洗牌。如果运行不正常,您可以尝试增加分区数。

此视频解释了问题,并提出了一个解决方案: https://www.youtube.com/watch?v=6zg7NTw-kTQ

干杯,福科