Spark 性能优化:调节并行度

并行度:Spark 作业中,会根据 action 操作划分成多个 job,每个 job 中会根据 shuffle 划分成多个 stage,每个 stage 会分配多个 task 去执行,各个 stage 划分的 task 数量就代表了 Spark 作业在该 stage 的并行度。

一,调整并行度的作用

假设 Spark 作业的处理的数据量是不变的,这些数据会被分配到每个 task 中去处理,在集群配置资源分配好的情况下,提升并行度,相当于分配越多的 task,这样每个 task 分配的数据量就会越少,有助于提升执行效率。

当然也不是无限提升就有好处,这和 executor 分配的 core 的数量有关,每个 core 一次只能执行一个 task,所以并行度的调整和 core 的数量有很大关系。

比如,我们在 spark-submit 的 shell 脚本中配置了 50 个 executor,每个 executor 有 10g 内存和 3 个 core。这样的配置已经达到了集群或者 yarn 资源队列的上限。这时候我们来调整并行度,50 个 executor,每个 executor 有 3 个 core,那么一共有 150 个 core,如果我们这时候设置的并行度为 100 个,那么可以看出在每个 stage 执行任务的 task 数量只有 100 个,executor 用来执行 task 的 core 还有 50 个没被利用。相当于资源被浪费了。

二,怎么设置

1,task 的数量至少应该设置成和集群中配置的 core 数量一致。

2,官方推荐的是:task 的数量,设置成 core 数量的 2~3 倍。

这是因为:实际生产情况下,有些 task 的运行会快一点,比如 50s 就结束了,有些慢一点,比如 1 分钟,在这种情况下,避免让 core 有空闲,造成资源浪费,可以让 task 的数量多一点,这样可以让结束较快的 task 对应的 core 不会空闲下来。

3,设置方式:

SparkConf conf = new SparkConf()
  								.set("spark.default.parallelism", "500")
  								.xxx
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值