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

Scala Spark作业在显示所有作业完成后重新启动,然后失败(TimeoutException:Futures在[300秒]后超时),scala,apache-spark,apache-spark-sql,spark-dataframe,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,我在做一份有活力的工作。它显示所有作业都已完成: 但是,在几分钟后,整个作业将重新启动,这一次它将显示所有作业和任务也已完成,但在几分钟后它将失败。 我在日志中发现此异常: java.util.concurrent.TimeoutException: Futures timed out after [300 seconds] 因此,当我试图连接两个相当大的表时会发生这种情况:一个是3B行,第二个是200M行,当我在生成的数据帧上运行show(100)时,所有内容都会得到评估,我会遇到这个问题

我在做一份有活力的工作。它显示所有作业都已完成:

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

java.util.concurrent.TimeoutException: Futures timed out after [300 seconds]
因此,当我试图连接两个相当大的表时会发生这种情况:一个是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
您可以了解spark版本以及使用的资源


我该怎么办?任何帮助都将不胜感激,如果需要,将提供代码段/附加日志记录。

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


我查看了持久化数据帧前后的执行计划,奇怪的是,在持久化之前,spark尝试执行
BroadcastHashJoin
,但由于数据帧太大,显然失败了,持久化之后,执行计划显示连接将
ShuffleHashJoin
,没有任何问题。虫子?也许,我会尝试使用更新的spark版本。

Hi@ilcord,你能解决这个问题吗?是的。看我下面的答案如果它的尺寸更大,那么它的尺寸是多少?你可以增加spark.sql.autoBroadcastJoinThreshold(也许你是怎么做到的?你能分享代码吗?我是spark的新手,我在访问前执行val df_=sparkSession.sqlContext.sql(“从两个表中选择字段相互连接”)时遇到同样的问题