ShadowNinjia 2025-04-03 20:06 采纳率: 0%
浏览 18

spark on yarn报错

在pycharm上提交spark任务到yarn上运行时报错:
org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_1743237194606_0003 to YARN : root is not a leaf queue
以下是代码:

# coding:utf8
from pyspark import SparkConf, SparkContext
from defs_19 import city_with_category
import json
import os
os.environ['HADOOP_CONF_DIR'] = "/export/server/hadoop/etc/hadoop"

if __name__ == '__main__':
    conf = SparkConf().setAppName("test-yarn-1").setMaster("yarn")
    conf.set("spark.submit.pyFiles", "defs_19.py")
    sc = SparkContext(conf=conf)

    file_rdd = sc.textFile("hdfs://node1:8020/input/order.text")
    jsons_rdd = file_rdd.flatMap(lambda line: line.split("|"))
    dict_rdd = jsons_rdd.map(lambda json_str: json.loads(json_str))
    beijing_rdd = dict_rdd.filter(lambda d: d['areaName'] == "北京")
    category_rdd = beijing_rdd.map(city_with_category)
    result_rdd = category_rdd.distinct()
    print(result_rdd.collect())
# coding:utf8
def city_with_category(date):
    return date['areaName'] + '_' + date['category']
  • 写回答

3条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-04-03 21:07
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    # Spark on YARN 报错解决方案

    错误分析

    您遇到的错误是:

    org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_1743237194606_0003 to YARN : root is not a leaf queue
    

    这个错误表明您在提交Spark任务到YARN时,指定的队列配置有问题。YARN队列必须是叶子队列(leaf queue),而您可能尝试使用了非叶子队列(如root队列)。

    解决方案

    方法1:指定正确的YARN队列

    修改您的SparkConf配置,添加队列参数:

    conf = SparkConf().setAppName("test-yarn-1").setMaster("yarn")
    conf.set("spark.submit.pyFiles", "defs_19.py")
    # 添加以下配置,指定一个有效的叶子队列
    conf.set("spark.yarn.queue", "default")  # 使用default队列或其他已配置的叶子队列
    

    方法2:检查YARN队列配置

    1. 查看YARN队列配置:
      yarn queue -list
      
    2. 或者检查capacity-scheduler.xml配置文件中的队列结构

    方法3:完整配置示例

    以下是修改后的完整代码示例:

    # coding:utf8
    from pyspark import SparkConf, SparkContext
    from defs_19 import city_with_category
    import json
    import os
    os.environ['HADOOP_CONF_DIR'] = "/export/server/hadoop/etc/hadoop"
    
    if __name__ == '__main__':
        conf = SparkConf().setAppName("test-yarn-1").setMaster("yarn")
        conf.set("spark.submit.pyFiles", "defs_19.py")
        conf.set("spark.yarn.queue", "default")  # 指定队列
        sc = SparkContext(conf=conf)
    
        file_rdd = sc.textFile("hdfs://node1:8020/input/order.text")
        jsons_rdd = file_rdd.flatMap(lambda line: line.split("|"))
        dict_rdd = jsons_rdd.map(lambda json_str: json.loads(json_str))
        beijing_rdd = dict_rdd.filter(lambda d: d['areaName'] == "北京")
        category_rdd = beijing_rdd.map(city_with_category)
        result_rdd = category_rdd.distinct()
        print(result_rdd.collect())
    

    其他可能需要的配置

    如果仍然有问题,可以尝试添加以下配置:

    conf.set("spark.hadoop.yarn.resourcemanager.scheduler.address", "node1:8030")
    conf.set("spark.hadoop.yarn.resourcemanager.address", "node1:8032")
    

    请根据您的实际YARN集群配置调整上述地址和端口。

    评论

报告相同问题?

问题事件

  • 修改了问题 4月3日
  • 修改了问题 4月3日
  • 创建了问题 4月3日