spark调优-如何合理的分配资源(executor-memory,num-executors,executor-cores)

executor-memory

在集群资源允许的情况下,且不oom的情况下,通常越多越好,同时要在webui观察gc时长,达到平衡值(过多的内存会导致单次gc所需时间过长,过少的内存会导致频繁gc),个人建议上限为单个containers最大值的75%。

 

num-executors,executor-cores

num-executors和executor-cores,由于执行任务的并发数=num-executors * executor-cores 。所以这一点经常会思考是100*1好,还是50*2比较好?

1.假设shuffer压力不大

(1)在数据分布均匀,executor-memory=8G,100*1是比50*2的理论上是要好些的,因为这样单个任务所拥有的内存会更充足,gc的次数会更少。

(2)在数据分布不均匀的情况下,可设置executor-memory=16G,50*2理论上是比100*1效果要好些的,因为如果设置为100*1,数据量小的任务会很快执行完,造成executor空闲。资源浪费。且在数据不均匀的情况下,executor-memory要适当提高,以免oom。

2.若shuffer有一定压力

(1)shuffer的本质是在网络磁盘IO,假设每个executor都分布在不同的节点,那么过多的executor-num会造成网络之间的IO过大,shuffer read可能造成timeout。所以这个时候理论上是设置较小的executor-num,较多的executor-cores,和较大的executor-memory是比较合理。以上文为例: executor-memory=32G num-executors=25 executor-cores =4

3.若任务主要是sc.textFile().map().saveAsTextFile

那么其瓶颈主要是在读取hdfs文件,以及业务代码运行效率上。在单个节点给予过多的executor-cores,可能造成节点和hdfs的IO打满。那么这个时候应该适当降低executor-cores,增加executor-num。

posted @   所向披靡zz  阅读(794)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示