Spark 作业在显示所有作业已完成然后失败后重新启动(TimeoutException: Futures timed out after [300 seconds])
Posted
技术标签:
【中文标题】Spark 作业在显示所有作业已完成然后失败后重新启动(TimeoutException: Futures timed out after [300 seconds])【英文标题】:Spark job restarted after showing all jobs completed and then fails (TimeoutException: Futures timed out after [300 seconds]) 【发布时间】:2016-03-29 16:56:11 【问题描述】:我正在运行 Spark 作业。它表明所有作业都已完成:
但是几分钟后整个作业重新启动,这一次它会显示所有作业和任务也已完成,但几分钟后它会失败。 我在日志中发现了这个异常:
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
您可以了解有关 spark 版本的想法,以及从那里使用的资源。
我从这里去哪里?任何帮助将不胜感激,如果需要,将提供代码段/其他日志记录。
【问题讨论】:
嗨@ilcord,你能解决这个问题吗? 是的。请看下面我的回答 【参考方案1】:最终解决这个问题的方法是在加入之前保留两个数据帧。
查看了持久化数据帧前后的执行计划,奇怪的是spark在持久化之前尝试执行一个BroadcastHashJoin
,显然由于数据帧太大而失败,而在持久化之后执行计划显示连接将是ShuffleHashJoin
,完成后没有任何问题。一个错误?也许,我会尝试使用更新的 spark 版本。
【讨论】:
如果它的尺寸更大,那么尺寸是多少?你可以增加spark.sql.autoBroadcastJoinThreshold
(也许my answer 以更好地理解
你是怎么做到的?你可以分享代码吗?我很漂亮。新火花,我在做 val df_before_visits =sparkSession.sqlContext.sql("SELECT fieldsFROM two tables join each other")时遇到同样的问题以上是关于Spark 作业在显示所有作业已完成然后失败后重新启动(TimeoutException: Futures timed out after [300 seconds])的主要内容,如果未能解决你的问题,请参考以下文章