产品动态
产品公告
安全公告
/usr/local/service 路径下(/usr/local/service/spark)。spark-<version>-yarn-shuffle.jar 拷贝到集群各个节点的 /usr/local/service/hadoop/share/hadoop/yarn/lib 目录路径下。
ssh $user@$ip,$user 为登录的用户名,$ip 为远程节点 IP(即步骤1中确定的 IP 地址)。


spark-<version>-yarn-shuffle.jar 文件路径。

spark-<version>-yarn-shuffle.jar 拷贝到 /usr/local/service/hadoop/share/hadoop/yarn/lib 下。


[root@172 ~]# yum install sshpass
#!/bin/bashnodes=(ip1 ip2 … ipn) #集群各节点 IP 列表,空格分隔len=${#nodes[@]}password=<your password>file=" spark-2.3.2-yarn-shuffle.jar "source_dir="/usr/local/service/spark/yarn"target_dir="/usr/local/service/hadoop/share/hadoop/yarn/lib"echo $lenfor node in ${nodes[*]}doecho $node;sshpass -p $password scp "$source_dir/$file"root@$node:"$target_dir";done
#!/bin/bashnodes=(ip1 ip2 … ipn) #集群各节点 IP 列表,空格分隔len=${#nodes[@]}password=<your password>file=" spark-2.3.2-yarn-shuffle.jar "source_dir="/usr/local/service/spark/yarn"target_dir="/usr/local/service/hadoop/share/hadoop/yarn/lib"echo $lenfor node in ${nodes[*]}doecho $node;scp "$source_dir/$file" root@$node:"$target_dir";done
yarn-site.xml,维度范围选择“集群维度”(集群维度的配置项修改将应用到所有节点),然后单击修改配置。

yarn.nodemanager.aux-services,添加 spark_shuffle。

yarn.nodemanager.aux-services.spark_shuffle.class,该配置项的值设置为 org.apache.spark.network.yarn.YarnShuffleService。

spark.yarn.shuffle.stopOnFailure,该配置项的值设置为 false。


配置项 | 值 | 备注 |
spark.shuffle.service.enabled | true | 启动 shuffle 服务。 |
spark.dynamicAllocation.enabled | true | 启动动态资源分配。 |
spark.dynamicAllocation.minExecutors | 1 | 每个 Application 最小分配的 executor 数。 |
spark.dynamicAllocation.maxExecutors | 30 | 每个 Application 最大分配的 executor 数。 |
spark.dynamicAllocation.initialExecutors | 1 | 一般情况下与 spark.dynamicAllocation.minExecutors 值相同。 |
spark.dynamicAllocation.schedulerBacklogTimeout | 1s | 已有挂起的任务积压超过此持续事件,则将请求新的执行程序。 |
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout | 5s | 带处理任务队列依然存在,则此后每隔几秒再次出发,每轮请求的 executor 数目与上轮相比呈指数增长。 |
spark.dynamicAllocation.executorIdleTimeout | 60s | Application 在空闲超过几秒钟时会删除 executor。 |
/usr/local/service/spark 目录,切换 hadoop 用户,使用 spark-submit 提交一个任务,数据需存储在 hdfs 上。[root@172 ~]# cd /usr/local/service/spark/[root@172 spark]# su hadoop[hadoop@172 spark]$ hadoop fs -put ./README.md /[hadoop@172 spark]$ spark-submit --class org.apache.spark.examples.JavaWordCount --master yarn-client --num-executors 10 --driver-memory 4g --executor-memory 4g --executor-cores 2 ./examples/jars/spark-examples_2.11-2.3.2.jar /README.md /output


/usr/local/service/spark 目录,切换 hadoop 用户,使用 spark-sql 启动 SparkSQL 交互式控制台。交互式控制台被设置成占用测试集群的大部分资源,观察设置资源动态调度前后资源分配情况。[root@172 ~]# cd /usr/local/service/spark/[root@172 spark]# su hadoop[hadoop@172 spark]$ spark-sql --master yarn-client --num-executors 5 --driver-memory 4g --executor-memory 2g --executor-cores 1
[root@172 ~]# cd /usr/local/service/spark/[root@172 spark]# su hadoop[hadoop@172 spark]$ spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client --num-executors 5 --driver-memory 4g --executor-memory 4g --executor-cores 2 examples/jars/spark-examples_2.11-2.3.2.jar 500


spark.dynamicAllocation.executorIdleTimeout 设置时间时,空闲的 executor 被释放,其他任务获得资源。在本次测试中 SparkSQL 任务的集群资源占用率从90%降至28%,空闲资源分配给圆周率计算任务,自动调度有效。spark.dynamicAllocation.executorIdleTimeout 的值将影响资源动态调度的快慢,测试发现资源调度用时基本与该值相等,建议您根据实际需求调整该配置项的值以获得最佳性能。文档反馈