spark动态资源分配
来源:互联网 发布:安乡论坛网络问政 编辑:程序博客网 时间:2024/05/20 11:24
1.简介
前段时间仓库间推广spark-sql时,生产环境已经应用了spark dynamic resource allocation特性,即可动态的资源分配,这里的动态和资源分配是指executor级的,我们知道spark的资源分配是比较coarse-grained的,一个spark作业不同stage之间task数量有时差异比较大,特别是最后stage的时候,有些作业数据稍微倾斜一下,那就有大量的executor是在空闲状态,造成集群资源的极大浪费,通过动态资源分配,已经空闲的executor,如果超过了timeout时间,即可回收资源,而不是继续占用资源;
2.DRA配置安装
可参照官网http://spark.apache.org/docs/1.6.3/job-scheduling.html#dynamic-resource-allocation
1.首先找到spark版本的spark-<version>-yarn-shuffle.jar shuffle包,并将该包放到集群所有NodeManager的classpath下,比如放到HADOOP_HOME/share/hadoop/yarn/lib
2.在所有节点的yarn-site.xml中NodeManager上运行的附属服务中加入spark_shuffle及对应的class类,如下:
<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>
3.重启所有的Nodemanager
即可配置安装好spark的动态资源的分配;
3.spark作业配置
spark动态资源分配默认是不开启的,并且只要设置了num-executors设置了作业的executor数,就不再有效;
作业中设置,需要在conf中加入以下配置项:
spark.dynamicAllocation.enabled
false是否要开启DRA功能,要开启则设置为true,设置为true需要将spark.shuffle.service.enabled
设置为true;
spark.dynamicAllocation.executorIdleTimeout
60sexecutor空闲多长时间就被移除释放spark.dynamicAllocation.cachedExecutorIdleTimeout
infinity这个要考虑cache数据的时候,有cache数据要空闲多长时间才能移除;默认无限,首先保证cache的数据后面操作需要的时候是不能移除的,这个要注意;spark.dynamicAllocation.initialExecutors
spark.dynamicAllocation.minExecutors
初始化的executor数spark.dynamicAllocation.maxExecutors
infinity动态的时候最多executor数spark.dynamicAllocation.minExecutors
0动态的时候最少executor数spark.dynamicAllocation.schedulerBacklogTimeout
1s表示积压多久任务的时候要新申请executorspark.dynamicAllocation.sustainedSchedulerBacklogTimeout
schedulerBacklogTimeout
如:spark-submit \
--master yarn \
--deploy-mode cluster \
--executor-cores 3 \
--executor-memory 10G \
--driver-memory 4G \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.shuffle.service.enabled=true \
--conf spark.dynamicAllocation.initialExecutors=5 \
--conf spark.dynamicAllocation.maxExecutors=40 \
--conf spark.dynamicAllocation.minExecutors=0 \
--conf spark.dynamicAllocation.executorIdleTimeout=30s \
--conf spark.dynamicAllocation.schedulerBacklogTimeout=10s \
另外注意:
资源动态控制,spark-core、spark-sql以及机器学习等task需要相对长时间且有差异的作业,Spark Streaming是按照批处理间隔数据流来处理的,对数据处理速率有要求,而不是粗粒度的资源的动态分配;
- spark动态资源分配
- Spark动态资源分配-Dynamic Resource Allocation
- Spark动态资源分配-Dynamic Resource Allocation
- spark学习-59-Spark的动态资源分配ExecutorAllocationManager
- Spark 动态资源分配(Dynamic Resource Allocation) 解析
- Spark在Yarn上的动态资源分配
- 关于spark程序动态资源分配的一些理解
- Spark 动态资源分配(Dynamic Resource Allocation) 解析
- spark资源调度分配
- Spark资源调度分配原理
- Spark资源调度分配解密
- 资源分配动态规划
- spark中的动态executor分配
- 动态规划 资源分配问题
- Spark schedule资源调度分配详解
- spark性能调优之分配资源
- Standalone模式下Spark任务资源分配
- 动态规划解资源分配问题
- Linux后台运行java的jar包
- HDU-1029-Ignatius and the Princess IV
- matlab 求解线性规划
- 五月天,请让我再任性一次
- opencv 3.0 DPM Cascade 检测 (附带TBB和openMP加速)
- spark动态资源分配
- dp——vijos1207
- 常用的几款SSH工具通过密匙认证连接远程主机
- Android面试题—校招—美团
- 密码学——公钥与私钥
- 【教程干货】HTML5技术资料大共享
- Win10升级后Edge浏览器找不到,解决办法
- SAP屠夫---折旧在13-16调整期间的烦恼
- 从小白系统的学完python语言那么工资有多少了