显示所有作业完成后重新启动Spark作业然后失败(TimeoutException:Futures在[300秒]后超时)

时间:2016-03-29 16:56:11

标签: scala apache-spark apache-spark-sql spark-dataframe

我正在经营一项火花工作。它表明所有工作都已完成: enter image description here

然而,在几分钟后整个作业重新启动,这次它将显示所有作业和任务也已完成,但几分钟后它将失败。 我在日志中发现了这个例外:

java.util.concurrent.TimeoutException: Futures timed out after [300 seconds]

所以当我尝试加入2个相当大的表时会发生这种情况:3B行之一,第二行是200M行,当我在生成的数据帧上运行show(100)时,所有内容都会被评估,我就是得到这个问题。

我尝试使用增加/减少分区数量,我将垃圾收集器更改为G1,增加了线程数。我将spark.sql.broadcastTimeout更改为600(这使得超时消息更改为600秒)。

我还读到这可能是一个通信问题,但是在此代码段之前运行的其他show()子句没有问题,所以它可能不是。

这是提交命令:

/opt/spark/spark-1.4.1-bin-hadoop2.3/bin/spark-submit  --master yarn-cluster --class className --executor-memory 12g --executor-cores 2 --driver-memory 32g --driver-cores 8 --num-executors 40 --conf "spark.executor.extraJavaOptions=-XX:+UseG1GC -XX:ConcGCThreads=20" /home/asdf/fileName-assembly-1.0.jar

你可以了解火花版本以及从那里使用的资源。

我从哪里开始?任何帮助将不胜感激,如果需要,将提供代码段/额外的日志记录。

1 个答案:

答案 0 :(得分:4)

最终解决这个问题的方法是在加入之前保留两个数据帧。

我在持久化数据框之前和之后查看了执行计划,奇怪的是,在持续spark之前尝试执行BroadcastHashJoin,由于数据框的大小而明显失败,之后坚持执行计划表明联接将是ShuffleHashJoin,完成后没有任何问题。一个bug?也许,我会尝试使用更新的火花版本。