微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

1.分配更多资源

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

2.性能调优的点

2.1分配哪些资源

executor
cup per executor
memory per executor
driver memory

2.2哪里分配资源

/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 \  配置每个executor的cpu core数量
/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \

2.3调节到多大才算最大

        第一种,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。

3.为什么调节了资源之后,性能可以提升

3.1增加executor

         如果executor的数量少,那么能够 并行执行的task数量就会变少,这就意味着Application的并行执行能力比较弱。比如有3个executor,每个executor有2个cpu core,那么同时能够执行的task数量为6个。执行完当前的6个task后,再执行下一批6个task。增加了executor后,能够并行执行的task的数量就会变多,就以为着性能得到提升。

3.2增加每个executor的cpu core

         根据上面一点,Application的并行执行能力跟每个executor的cpu core数量有关。比如,原来有20个executor,每个executor有2个cpu core,那么并行执行的task数量为40个;
        现在还是20个executor,把每个executor的数量增加到5个,那么并行执行的task数量为100个,性能提升了2.5倍。

3.3增加每个executor的内存

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

SimpleSimpleSimples 发布了54 篇原创文章 · 获赞 7 · 访问量 3万+ 私信 关注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐