执行spark on yarn任务时报错:
Caused by : java.util.concurrent.TimeoutException: Futures timed out after 1000s
一般这个报错发生在大表join小表broadcast join模式的时候,会将小于spark.sql.autoBroadcastJoinThreshold值(默认为10M)的表广播到其他计算节点,不走shuffle过程,但是而其中一个 DataFrame 非常大,因此发送它会消耗很多时间。
参考此网站
This happens because Spark tries to do Broadcast Hash Join and one of the DataFrames is very large, so sending it consumes much time.
You can:
Set higher spark.sql.broadcastTimeout to increase timeout - spark.conf.set(“spark.sql.broadcastTimeout”, newValueForExample36000)
persist() both DataFrames, then Spark will use Shuffle Join
所以可以:
增大spark.sql.broadcastTimeout的值;
持久化两个DataFrames;
另外,还可以考虑将BroadcastJoin禁用掉,以及增加spark.driver.memory的值。
In addition to increasing spark.sql.broadcastTimeout or persist() both DataFrames,
You may try:
1.disable broadcast by setting spark.sql.autoBroadcastJoinThreshold to -1
2.increase the spark driver memory by setting spark.driver.memory to a higher value.
https://blog.csdn.net/weixin_44455388/article/details/101286428