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 :(得分:4)
最终解决这个问题的方法是在加入之前保留两个数据帧。
我在持久化数据框之前和之后查看了执行计划,奇怪的是,在持续spark之前尝试执行BroadcastHashJoin
,由于数据框的大小而明显失败,之后坚持执行计划表明联接将是ShuffleHashJoin
,完成后没有任何问题。一个bug?也许,我会尝试使用更新的火花版本。