spark的动态资源配置

spark的动态资源配置

对于Spark应用来说,资源是影响Spark应用执行效率的一个重要因素。当一个长期运行 的服务(比如Thrift Server),若分配给它多个Executor,可是却没有任何任务分配给它,而此时有其他的应用却资源张,这就造成了很大的资源浪费和资源不合理的调度。

​ 动态资源调度就是为了解决这种场景,根据当前应用任务的负载情况,实时的增减 Executor个数,从而实现动态分配资源,使整个Spark系统更加健康。

1、External Shuffle Service配置
1、拷贝${SPARK_HOME}/yarn/目录下的spark--yarn-shuffle.jar到${HADOOP_HOME}/share/hadoop/yarn/lib/目录下;
xsync  spark-<version>-yarn-shuffle.jar
2、在${HADOOP_HOME}/etc/hadoop/yarn-site.xml文件中添加如下配置:
    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle,spark_shuffle</value>
   </property>
    <property>
       <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
       <value>org.apache.spark.network.yarn.YarnShuffleService</value>
   </property>
注意:如果 “yarn.nodemanager.aux-services” 配置项已存在,则在 value 中添加 “spark_shuffle”,且用逗号和其他值分开。
2、增大NodeManager的heap size

通过在${HADOOP_HOME}/etc/hadoop/yarn-env.sh文件中设置YARN_HEAPSIZE的值(默认为1000)来实现,此处以配置为6000为例。

xsync yarn-env.sh
3、配置基本参数在spark-defaults.sh
#配置External shuffle Service服务(一定要配置启用)
spark.shuffle.service.enabled                true   
#启用动态资源调度
spark.dynamicAllocation.enabled         true   
#每个应用中最少executor的个数
spark.dynamicAllocation.minExecutors    1    
#每个应用中最多executor的个数
spark.dynamicAllocation.maxExecutors    3  

注:动态资源配置完成后,一定要先重启spark再重启hadoop,否则会因为端口占用问题导致重启不成功,原因未知。

动态资源可选配置参数如下:

参数名称 默认值 说明
spark.dynamicAllocation.enabled false 是否使用动态资源分配,根据工作负载对应用程序executor进行扩展
spark.dynamicAllocation.executorIdleTimeout 60s 如果启用了动态分配并且executor已经空闲超过这个时间,executor将被释放
spark.dynamicAllocation.cachedExecutorIdleTimeout infinity 如果启用了动态分配,并且缓存数据块的executor已经空闲了超过这个时间,executor将被释放
spark.dynamicAllocation.initialExecutors spark.dynamicAllocation.enabled 如果启用动态分配,则要运行executor的初始数量。如果设置了“–num-executors”(或“spark.executor.instances”)并且大于这个值,则会使用这个值进行初始化。 如: max(initialExecuor = 3, –num-executors = 10) 取最大
spark.dynamicAllocation.maxExecutors infinity 如果启用动态分配,executor的上限个数。必须设置一个数,否则会占用集群所有资源
spark.dynamicAllocation.minExecutors 0 如果启用动态分配,executor的下限个数。
spark.dynamicAllocation.schedulerBacklogTimeout 1s 如果启用动态分配,超过这个时间后还有未完成的积压任务,将会触发再次请求新的executor
spark.shuffle.service.port 7337 shuffle服务监听数据获取请求的端口,可选配置。默认值为:7337
4、最后说明

说明

  1. 使用动态资源调度功能,必须配置External Shuffle Service。如果没有使用External Shuffle Service,Executor被杀时会丢失shuffle文件。
  2. 配置了动态资源调度功能,就不能再单独配置Executor的个数,否则会报错退出。
  3. 使用动态资源调度功能,能保证最少的executor的个数(spark.dynamicAllocation.minExecutors)
发布了32 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yang735136055/article/details/100061133