Yarn Capacity Scheduler ACL规则不生效问题求助
修正Spark提交命令格式
你当前的命令参数顺序有误:--master yarn cluster应改为--master yarn --deploy-mode cluster。参数格式错误可能导致--queue a未被正确解析,任务实际提交到了默认队列而非队列a。先修正命令重新测试:spark-shell --master yarn --deploy-mode cluster --queue a之后通过YARN WebUI或
yarn application -status <app-id>命令确认任务实际所属队列。确认CapacityScheduler已启用
检查yarn-site.xml中调度器类配置,确保值为:<property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property>若配置为FairScheduler或其他调度器,
capacity-scheduler.xml的队列ACL配置完全不会生效。校验capacity-scheduler.xml的队列ACL配置
重点确认队列a的提交权限设置:- 队列a的
yarn.scheduler.capacity.root.a.acl_submit_applications必须明确指定为user1,不能留空或继承根队列配置。示例配置:<property> <name>yarn.scheduler.capacity.root.a.acl_submit_applications</name> <value>user1</value> </property> - 检查根队列的
yarn.scheduler.capacity.root.acl_submit_applications,若配置为*(允许所有用户)且队列a未单独配置提交ACL,会继承根队列权限,导致user2可提交任务。 - 确认ACL格式正确:用户与组用逗号分隔,无多余空格,比如
user1,group1,避免写成user1或user1;group1。
- 队列a的
确保ResourceManager已加载新配置
修改capacity-scheduler.xml或yarn-site.xml后,必须重启YARN ResourceManager或刷新队列配置:- 刷新队列配置(仅适用于队列权限修改):
yarn rmadmin -refreshQueues - 若修改了调度器类,需重启ResourceManager:
stop-yarn.sh start-yarn.sh
- 刷新队列配置(仅适用于队列权限修改):
检查user2是否为YARN超级用户
查看yarn-site.xml中的yarn.admin.acl配置,若包含user2,则user2拥有YARN管理员权限,队列ACL限制对其无效。示例:<property> <name>yarn.admin.acl</name> <value>user1,user2</value> </property>这种情况需要移除user2的管理员权限。
排查Spark默认配置是否覆盖队列参数
查看spark-defaults.conf中是否存在spark.yarn.queue配置,若有该配置,命令行的--queue参数会被默认值覆盖。比如:spark.yarn.queue default若存在此配置,可删除它或确认命令行参数优先级(Spark 2.x+命令行参数优先级更高)。
查看ResourceManager日志定位问题
查看ResourceManager日志文件(默认路径为$HADOOP_HOME/logs/yarn-*-resourcemanager-*.log),搜索acl_submit_applications或user2关键词,找到任务提交时的ACL校验日志,确认是否存在配置解析错误或权限绕过情况。
内容的提问来源于stack exchange,提问作者Đắc An Nguyễn

