2016-03-29 15 views
3

我正在运行火花作业。它显示所有作业都已完成: enter image description here在显示所有作业完成后重新启动Spark作业,然后失败(TimeoutException:期间在[300秒]后超时)

然而,几分钟后整个作业重新启动,这次它会显示所有作业和任务已完成,但几分钟后它将失败。 我发现这个异常的日志:

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 

您可以获得有关火星版本的想法,并从那里使用的资源。

我该从哪里出发?任何帮助将不胜感激,如果需要,将提供代码段/附加日志记录。

+0

嗨@ilcord,你能解决这个问题吗? – dbustosp

+0

是的。看到我的回答如下 – ilcord

回答

3

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

我在持续数据帧之前和之后查看了执行计划,奇怪的是,在持续的spark之前试图执行一个BroadcastHashJoin,由于数据帧的大小而显然失败,并且在执行之后计划表明,加入将是ShuffleHashJoin,完成没有任何问题。一个错误?也许,我会尝试使用更新的火花版本。

+1

更新:似乎它运行良好与火花1.5 + – ilcord

+0

如果它的大尺寸那么尺寸是多少?你可以增加'spark.sql.autoBroadcastJoinThreshold'(可能<2gig)可以看到效果。意思是说,你广泛的数据(小数据帧)适合于以上的价值然后它仍然做广播加入..也有看到[我的回答](https://stackoverflow.com/a/39404486/647053)了解更好 –

相关问题