Spark性能调优(二)---在实际项目中调节并行度

本文深入探讨Spark作业中并行度的概念,分析并行度过低对资源利用的影响,及如何通过合理设置并行度来充分利用集群资源,提升作业性能和运行速度。建议将并行度设置为总cpu核心数的2~3倍,确保资源高效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是并行度

并行度,其实就是指,Spark作业中 ,各个stage的task数量,也就代表了Spark作业在各个阶段(stage)的并行度。

2.并行度过低的危害

        假如,在spark-submit脚本里面,给Spark作业分配了足够多的资源,比如50个executor,每个executor有10G内存,3个cpu core。基本已经达到了集群或者yarn队列的资源上限。

         task如果设置的过少,比如设置了100个task。拥有的资源中,50个executor,每个executor有3个cpu core,那么Application任何一个stage运行的时候,都有总数150个的cpu core可以并行运行。但是实际只有100个task,平均分配一下,每个executor分配到2个task,那么每个executor就会有1个cpu core闲着,造成资源的浪费。

        综上所述,虽然资源分配得足够多了,但是并行度与资源不匹配,导致分配下去的资源被浪费掉。

        合理的并行度的设置,应该要设置得足够大,大到可以完全合理地利用集群资源。比如上面的例子,集群总共有150个cpu core,可以并行运行150个task。那么就应该将Application的并行度至少设置成150,才能完全有效地利用集群资源,让150个task并行执行;而且task增加到150个以后,即可以同时并行运行,还可以让每个task需要处理的数据量变少;比如总共150G的数据要处理,如果是100个task,每个task需要处理1.5G的数据;现在增加到150个task,每个task只需要处理1G的数据。

       只要合理设置并行度,就可以完全充分利用集群资源,并且可以减少每个task要处理的数据量,最终,提升整个Spark作业的性能和运行速度。

3.如何设置合理的并行度

①task数量,至少设置成与Spark Application的总cpu core数量相同(最理想情况,比如总共150个cpu core,分配150个task,一起运行,差不多同一时间运行完毕)

②官方推荐,task数量,设置成Spark Application总cpu core数量的2~3倍,比如150个cpu core,设置300~500个task

        这是因为,实际情况与理想情况不同,有些task会运行得快一些,比如50S就完了,有些task会慢一些,要2分钟才运行完,所以如果task数量刚好和集群cpu core的数量相同,可能会导致资源的浪费,比如有150个task,50个先运行完了,剩下100个没运行完,这时其中的50个cpu core就会空闲出来,造成资源的浪费。如果task数量设置成集群cpu core数量的2~3倍,有一个task运行完,就会有其他的task补上来,保证cup core不会被空闲下来,尽量提升Spark作业的效率和速度,提升性能。

③如何设置Spark Application的并行度

设置参数:spark.defualt.parallelism

代码设置:SparkConf conf = new SparkConf().set("spark.defualt.parallelism","500");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值