ilc*_*ord 5 scala apache-spark apache-spark-sql spark-dataframe
但是,几分钟后,整个作业将重新启动,这一次它将显示所有作业和任务也已完成,但是几分钟后,它将失败。我在日志中发现了此异常:
java.util.concurrent.TimeoutException: Futures timed out after [300 seconds]
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试连接2个非常大的表时就会发生这种情况:3B行之一,第二行为200M行,当我show(100)在结果数据帧上运行时,所有内容都经过评估,而我遇到了这个问题。
我尝试增加/减少分区数,然后通过增加线程数将垃圾收集器更改为G1。我更改spark.sql.broadcastTimeout为600(这使超时消息更改为600秒)。
我还读到这可能是一个通信问题,但是show()在此代码段之前运行的其他子句可以正常工作,所以可能不是。
这是submit命令:
/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
Run Code Online (Sandbox Code Playgroud)
您可以了解Spark版本以及从那里使用的资源。
我从这里去哪里?我们将不胜感激,如有需要,还将提供代码段/其他日志记录。
最终解决这个问题的方法是在连接之前保留两个数据帧。
我查看了持久化数据帧之前和之后的执行计划,奇怪的是,持久化之前spark尝试执行 a BroadcastHashJoin,由于数据帧太大,显然失败了,而持久化之后执行计划显示 join将是ShuffleHashJoin,没有任何问题地完成。一个错误?也许,当我接触到它时,我会尝试使用更新的 Spark 版本。
| 归档时间: |
|
| 查看次数: |
5925 次 |
| 最近记录: |