Spark调优实战

首先解释一下名词:
 

num-executors  线程数:一般设置在50-100之间,必须设置,不然默认启动的executor非常少,不能充分利用集群资源,运行速度慢

executor-memory 线程内存:参考值4g-8g,num-executor乘以executor-memory不能超过队列最大内存,申请的资源最好不要超过最大内存的1/3-1/2

executor-cores 线程CPU core数量:core越多,task线程就能快速的分配,参考值2-4,num-executor*executor-cores的1/3-1/2

driver-memory  Driver申请的内存,默认是1G 在集群模式下使用

driver-cores    Driver可以使用的内核数,默认是1,仅仅在集群下使用

看一条实战的命令:

spark-submit 
--name xxxxxxxxx  
--class com.xx.xxx.SparkDecode2Parquet  
--driver-memory 1G 
--driver-cores 1 
--executor-cores 6 
--num-executors 6 
--executor-memory 9G 
--deploy-mode cluster  
--supervise --master  yarn  
hdfs://22.00.00.00:8020/user/adms/xxx.3.jar

公式:

每个executor所申请的内存=

spark-executor-memory + spark.yarn.executor.memoryOverhead【堆外内存  因为executor运行的时候可能会超过申请的内存 所以要预留些】

 

spark.yarn.executor.memoryOverhead= Max( 384MB, 7% * spark.executor-memory )

   

也就是说

如果我们为每个executor申请2G内存,ApplactionMaster实际上将会申请2G+max(384,0.07*2*1024)=2G+384M~=2.4G

 

接下来我们看下怎么调优

7个节点  63G内存  cpu16

我们可以先设置 --executor-cores 为5 建议的最大值  因而 总核数为16*5=80 

--num-executors =总核数/每个executor核数 =80/5 -1=15 【-1是因为要留给AM】

每个节点的executor数目=--num-executors/ --executor-cores =15/5=3

--executor-memory= 每个节点的内存/每个节点executor数目=63/3=21G  因为--executor-memory=--executor-memory+spark.yarn.executor.memoryOverhead【堆内存】所以=21G+max(384,0.07*21*1024) 约等于 23G

 

--num-executors 15  --executor-cores 5  --executor-memory 23G

所以应该这么写:

spark-submit 
--name xxxxxxxxx  
--class com.xx.xxx.SparkDecode2Parquet  
--driver-memory 1G 
--driver-cores 1 
--executor-cores 5 
--num-executors 15 
--executor-memory 23G 
--deploy-mode cluster  
--supervise --master  yarn  
hdfs://22.00.00.00:8020/user/adms/xxx.3.jar

 

 

所以一切都从--executor-cores开始吧!

具体的其他一些参数,都可以在官网看到,有时间在写出来吧。

希望能有帮助。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值