spark调优指南 面试专用

1、性能调优

一、分配哪些资源

executor的数量

每个excutor所能分配地cpu数量

每个excutor所分配的内存量

driver端分配的内存数量

二、在哪里分配这些资源

在生产环凌晨中,提交spark作业时,用spark-submit shell脚本,里面调整对应的参数:

/user/local/spark/bin/spark-submit \
--class cn.spark.sparktest.core.wordcountcluster \  
--num-executors 3 \ 配置executor的数量
--driver-memory 100m \配置driver的内存
--executor-memory 100m \配置executor的内存大小
--total-executor-cores 3 \配置executor的cpu core的数量
/usr/local/sparktest-0.0.1-jar.jar 

三、调节到多大,算最大呢

常用的资源调度模式有spark standalone 和spark on yarn ,比如说你的每台机器给你60G内存,和10 cpu core , 20 机器,那么Executor 的数量是20,平均每个Executor所分配的60G内存和10个cpu core。

四、为什么多分配这些资源以后,性能会提升?

增加executor

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

比如2个executor。每个2个cpu core,那么同时能够并行执行的task,就是6个,6个执行完以后,再下一批task 。增加executor数量后,那么意味着,能够并行执行的task数量,也就变多了。比如原先是6个,现在可能可以并行执行10个,甚至20个,100个.那么并行能力就比之前提升了数倍。数十倍。

增加每个Exector的cpu core,也是增加了执行的并行能力。原本20个Executor,每个才2个cpu core 。能够并行执行的task 数量,就是40个task.现在每个executor的cpu core增加到到4个,能够并行执行的task 的数量就是80个task。就物理性能来看,执行的速度,提升了2倍。

增加每个Exector的内存量,增加了内存量以后,对性能的提升,有三点:

1、如果需要对rdd进行cache,那么更多的内存,就可以缓存更多的数据。将更少的数据写入磁盘,甚至不写入磁盘,减少磁盘io

2、对于shuffle操作,reduce端,会需要内存,就可以缓存更多的数据,将更少的数据写入磁盘,甚至不写入磁盘,减少磁盘IO.提升性能。

3、对于task的执行,可能会创建很多对象。如果内存比较少,可能会频繁导致jvm堆内存满了,然后频繁gc,垃圾回收,minor gc 和full gc.速度很慢。内存加大以后,带来更少的gc,垃圾回收,避免速度变慢,速度变快了。

2、调节并行度

并行度的概念

就是提是spark作业中,每个Stage的task数量,代表了spark作业的各个阶段(stage)的并行度。

 

你可能感兴趣的:(大数据面试)