Spark性能调优(一)---在项目中分配更多的资源

一、分配更多资源

性能调优的王道,就是增加和分配更多的资源,性能和速度上会得到很大提升。基本上,在一定的范围之内,增加的资源和性能的提升是成正比的。所以,性能调优的第一步是增加资源,调节最优的资源配置;第二步,能够分配的资源达到能力范围的顶端后,无法再分配更多的资源,需要考虑下面几个性能调优的点。

 

二、性能调优的点

①分配哪些资源?

  • executor
  • cup per executor
  • memory per executor
  • driver memory

②在哪里分配资源?

在我们的生产环境中,提交spark作业时,用的spar-submit shell脚本,调整对应的参数

/usr/local/spark/bin/spark-submit \

--class cn.spark.sparktest.core.WordCountCluster \

--num-executors 3 \  配置executor的数量

--driver-memory 100m \  配置driver的内存(影响不大)

--executor-memory 100m \  配置每个executor的内存大小

--executor-cores 3 \  配置每个executorcpu core数量

/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \

 

③调节到多大才算最大?

第一种,Spark Standalone,公司的Spark集群上,根据实际情况,调节每个spark作业的资源分配。比如集群有30台机器,每台机器8G内存,4个cpu core;20个executor;那么,每个executor分配12G内存,6个cpu core。

第二种,Yarn。spark作业提交到yarn资源队列执行,需要查看队列剩下的可以使用的资源。比如500G内存,200个cpu core;50个executor;那么每个executor分配10G内存,4个cpu core。

 

三、为什么调节了资源之后,性能可以提升?

①增加executor

如果executor的数量少,那么能够 并行执行的task数量就会变少,这就意味着Application的并行执行能力比较弱。

比如有3个executor,每个executor有2个cpu core,那么同时能够执行的task数量为6个。执行完当前的6个task后,再执行下一批6个task。

增加了executor后,能够并行执行的task的数量就会变多,就以为着性能得到提升。

②增加每个executor的cpu core

根据上面一点,Application的并行执行能力跟每个executor的cpu core数量有关。

比如,原来有20个executor,每个executor有2个cpu core,那么并行执行的task数量为40个;

现在还是20个executor,把每个executor的数量增加到5个,那么并行执行的task数量为100个,性能提升了2.5倍。

③增加每个executor的内存

增加每个executor的内存,对性能的提升有3点:

  • 如果需要对RDD进行cache,更多的内存意味着可以缓存更多的数据,将更少的数据写入磁盘,甚至不写入磁盘,减少了磁盘IO,性能得到提升;
  • 对于shuffle操作,reduce端需要内存,来存放拉取过来的数据并进行聚合。如果内存不够,会写入磁盘。如果给executor分配更多的内存,那么需要写入磁盘的数据就会变少,甚至没有数据需要写入磁盘,减少了磁盘IO,性能得到提升;
  • 对于task的执行,可能需要创建对象。如果内存比较小,可能会导致频繁的JVM存内存满了,然后频繁的GC垃圾回收(minor GC和full GC),导致性能下降。内存加大之后,GC变少了,避免了性能下降,性能得到提升。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值