Spark SQL调优篇-driver-memory

281 阅读1分钟

最近其他部门需要做调度优化,需要我这边出一份调度数据做分析使用,数据量比较大,记录一下该过程。

任务资源:来源数据7T,SQL中主要的操作是分组求和,spark.dynamicAllocation.maxExecutors=300,executor-memory=6G ,spark.num.output.files=1500,driver-memory=2G,spark.shuffle.io.retryWait=30s。

任务运行报错: Cannot receive any relay from xxx in 300s,This timeout is controlled by spark.network.timeout

image.png

报错分析:这里retryWait已经设置为30s,连接等待时间应该是够的,可能是单个task负载太高,内存不够,但是executor-memeory=6G,而且查看任务输出日志大部分时间是在进行GC,这里尝试增加executor数提高并行度。

将maxExecutors=500任务还是报一样的错,将driver-memory设置为4G之后,任务运行通过。

总结:在网上看到driver memory主要用来存储一些DAG图信息,任务调动,资源划分等信息,还有一些CollectAsList等算子生成的数据也会放到Dirver memory中,惭愧,这里具体原因未知,记录一下,以后在遇到类似的情况在仔细查看原因。