Spark on yarn 动态资源配置
1、背景
spark on yarn 的环境下,开源的spark 默认是关闭动态分配申请资源的。每次提交时,需要手动定义--num-executors 的数量。
为了提交任务方便,需要开启动态分配资源
spark.dynamicAllocation.enabled true
但是需要注意的是,在提交实时任务时,需要手动定义资源数。不然有可能会将所有yarn的资源占用
2、配置
2.1 配置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> <property> <name>spark.shuffle.service.port</name> <value>7037</value> </property> <property> <name>spark.yarn.shuffle.service.metrics.namespace</name> <value>sparkShuffleService</value> </property>
在yarn.nodemanager.aux-services添加spark_shuffle
添加yarn.nodemanager.aux-services.spark_shuffle.class,spark.shuffle.service.port,spark.yarn.shuffle.service.metrics.namespace参数
2.2 配置spark jar包
在spark的安装目录yarn目录下找到spark-xxxx-yarn-shuffle.jar包
将其复制到hadoop home的share/hadoop/yarn/目录下。
本次测试集群的目录为/opt/hadoop/share/hadoop/yarn/
cp /opt/spark/yarn/spark-3.3.1-yarn-shuffle.jar /opt/hadoop/share/hadoop/yarn/
2.1和2.2的操作在所有yarn 节点执行。
重启yarn 服务。登录8088的yarn web ui检测nodemanager是否启动成功
2.3 spark 配置开启动态资源
在spark-defaults.conf中定义配置
spark.dynamicAllocation.enabled true spark.shuffle.service.enabled true spark.dynamicAllocation.initialExecutors 2 spark.dynamicAllocation.minExecutors 1 spark.dynamicAllocation.maxExecutors 100 spark.executor.instances 2
在配置文件中定义是默认开启的。也可以在提交时进行定义
spark-sql --master yarn --conf spark.shuffle.service.enabled=true --conf spark.dynamicAllocation.enabled=true -e "SELECT COUNT(*) FROM test1"