Spark 性能调优之资源分配

Spark 性能调优之资源分配

在资源足够的情况下,分配更多的机器、CPU、内存,对性能的提升是显而易见的;

因此,进行性能调优的时候,首先第一步,我觉得,就是要来调节最优的资源配置;在这个基础之上,
如果说你的spark作业,能够分配的资源达到了你的能力范围的顶端之后,无法再分配更多的资源了,
公司资源有限;那么才是考虑去做后面的这些性能调优的点

性能调优的王道,就是增加和分配更多的资源,资源提升使得速度的提升是显而易见的;


资源分配

  1. 分配哪些
  • executor 数量
  • 每个 executor 的核心数
  • 每个 executor 的内存
  • driver 的内存
  1. 怎么分配

在 spark-submit shell 脚本提交时:

./bin/spark-submit \
--class cn.spark.sparktest.core.WordCountCluster \
--num-executors 3 \  配置executor的数量
--executor-memory 100m \  配置每个executor的内存大小
--executor-cores 3 \  配置每个executor的cpu core数量
--driver-memory 100m \  配置driver的内存
/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \
  1. 为什么会性能提升
  • 增加 executor: 增加并行执行的能力

如果executor数量比较少,那么,能够并行执行的task数量就比较少,就意味着,我们的Application的并行执行的能力就很弱

比如有3个executor,每个executor有2个cpu core,那么同时能够并行执行的task,就是6个。6个执行完以后,再换下一批6个task。

增加了executor数量以后,那么,就意味着,能够并行执行的task数量,也就变多了。比如原先是6个,现在可能可以并行执行10个,甚至20个,100个。那么并行能力就比之前提升了数倍,数十倍。
相应的,性能(执行的速度),也能提升数倍~数十倍。

  • 增加 executor 的核心数: 增加并行执行的能力

和增加 executor 数量一样,增加 executor 的核心数,意味着同事可以并行处理的 task 数量也增加了;

  • 增加每个executor的内存量:

增加了内存量(相当于增加了执行内存和存储内存)以后,对性能的提升,有三点:
1、如果需要对RDD进行cache,那么更多的内存,就可以缓存更多的数据(存储内存增加),将更少的数据写入磁盘,甚至不写入磁盘,减少了磁盘IO。
2、对于shuffle操作,reduce端,会需要内存来存放拉取的数据并进行聚合。如果内存不够,也会写入磁盘。如果给executor分配更多内存以后,就有更少的数据,
需要写入磁盘,甚至不需要写入磁盘。减少了磁盘IO,提升了性能(执行内存增加)。
3、对于task的执行,可能会创建很多对象。如果内存比较小,可能会频繁导致JVM堆内存满了, 然后频繁GC,垃圾回收,minor GC和full GC。
(速度很慢)。内存加大以后,带来更少的GC,垃圾回收,避免了速度变慢,性能提升(其他内存的增加)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值