Scala编写的Spark作业未提交至指定YARN队列问题求助
我来帮你梳理下这个Spark作业YARN队列不生效的排查思路,之前处理过类似的问题,你可以按下面的步骤逐一排查:
确认SparkConf配置的有效性:
虽然你的代码顺序没问题,但建议尝试把队列配置合并到SparkConf的初始化语句中,避免可能的配置覆盖问题:val conf = new SparkConf() .setAppName("BigDataSparkInitialPoc") .set("spark.yarn.queue", "Hive") val sc = new SparkContext(conf)同时,在作业启动后,查看Spark driver日志,搜索
spark.yarn.queue关键字,确认实际生效的配置值是否为"Hive"。如果日志里显示的是默认队列,说明代码中的配置没有被正确加载。核对YARN队列的准确名称:
YARN队列名称是区分大小写的,Ambari界面显示的可能是友好名称,实际队列ID可能不同。你可以通过YARN命令行工具查看所有队列的准确信息:yarn queue -list确保代码中指定的队列名称和YARN实际存在的队列ID完全一致(包括大小写)。
确认作业提交模式:
只有当Spark作业以YARN模式提交时,spark.yarn.queue配置才会生效。如果你的作业是用local模式(比如--master local[*])运行的,Spark不会连接YARN,自然不会使用指定队列。请检查作业的提交命令,确保使用了--master yarn(或yarn-cluster/yarn-client,取决于Spark版本)。排查配置优先级冲突:
Spark配置的优先级顺序是:命令行参数--conf>spark-defaults.conf> 代码中设置的配置。如果你的spark-defaults.conf里已经设置了spark.yarn.queue=default,或者提交作业时用命令行参数指定了默认队列,都会覆盖代码中的配置。你可以:- 查看
spark-defaults.conf文件,确认是否存在spark.yarn.queue配置项; - 检查作业提交命令,是否带有
--conf spark.yarn.queue=xxx的参数。
- 查看
检查YARN队列的权限设置:
即使队列存在,提交作业的用户也需要具备该队列的提交权限。你可以通过以下命令查看队列的权限配置:yarn queue -status Hive查看
submit-applications对应的ACL列表,确认当前用户是否在允许范围内。如果没有权限,YARN会自动将作业路由到用户有权限的默认队列。排查Spark版本兼容性问题:
某些早期的Spark版本(比如Spark 1.x的部分版本)可能存在YARN队列配置不生效的bug。如果你的Spark版本较旧,可以尝试升级到稳定版本,或者查阅对应版本的官方文档,确认spark.yarn.queue配置项的正确性。
内容的提问来源于stack exchange,提问作者TomG

