Yarn集群Spark固定资源分配配置求助:单任务占20%集群资源
Spark on Yarn 固定资源分配解决方案
针对你的集群配置(45个工作节点,总360核/1080G内存),要实现5个任务同时运行且每个固定占用20%集群资源,按以下步骤配置:
1. 资源分配基准计算
每个任务需占用的20%集群资源:
- CPU核:
360 * 20% = 72核 - 内存:
1080 * 20% = 216G
结合单工作节点8核/24G的配置,每个任务分配9个executor(每个executor占满1个节点的资源),刚好匹配72核/216G的总配额。
2. 关闭Spark动态分配
禁用动态分配避免资源抢占,提交任务时添加以下参数:
--conf spark.dynamicAllocation.enabled=false --conf spark.shuffle.service.enabled=false
3. Spark任务固定资源提交参数
每个任务提交时必须指定以下核心参数,确保资源固定:
spark-submit \ --num-executors 9 \ --executor-cores 8 \ --executor-memory 22G \ --driver-memory 16G \ --conf spark.executor.memoryOverhead=2G \ --conf spark.yarn.am.memory=4G \ --conf spark.yarn.maxAppAttempts=1 \ # 你的应用jar和其他业务参数
executor-memory=22G:预留2G给Yarn NodeManager及系统进程,避免内存超配被Yarn killmemoryOverhead=2G:对应预留的系统内存,确保Yarn资源计算准确driver-memory=16G:主节点125G内存足够支撑,避免driver OOM
4. Yarn集群配置调整
修改Yarn核心配置文件,确保资源分配规则匹配:
yarn-site.xml
<property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>8</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>24576</value> <!-- 24G --> </property> <property> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>8</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>24576</value> </property>
CapacityScheduler配置(capacity-scheduler.xml)
若使用容量调度器,限制队列同时运行的任务数:
<property> <name>yarn.scheduler.capacity.root.spark.capacity</name> <value>100</value> </property> <property> <name>yarn.scheduler.capacity.root.spark.maximum-applications</name> <value>5</value> </property> <property> <name>yarn.scheduler.capacity.root.spark.user-limit-factor</name> <value>1</value> </property>
5. 异常排查要点
- 用
yarn application -list查看任务资源占用,确认每个任务的executor数量/核数符合预期 - 检查Yarn节点状态:
yarn node -list -all,确保无节点资源被占用或离线 - 查看Spark任务日志,若出现
Container killed by YARN,调整executor-memory和memoryOverhead的比例,确保总内存不超过单节点24G - 清理残留的Spark应用:
yarn application -kill <app-id>,避免旧任务占用资源
内容的提问来源于stack exchange,提问作者Katighar Umesh
相关产品推荐
相关产品推荐

