【问题标题】:WARN cluster.YarnScheduler: Initial job has not accepted any resourcesWARN cluster.YarnScheduler:初始作业未接受任何资源
【发布时间】:2017-11-18 18:41:31
【问题描述】:

我运行的任何 Spark 作业都将失败并显示以下错误消息

17/06/16 11:10:43 WARN cluster.YarnScheduler: Initial job has not 接受任何资源;检查您的集群 UI 以确保工作人员 已注册并有足够的资源

Spark 版本是 1.6,在 Yarn 上运行。

我正在从 pyspark 发布作业。

您可以从作业时间线中注意到它无限期地运行并且没有添加或删除任何资源。1

【问题讨论】:

    标签: apache-spark pyspark hadoop-yarn taskscheduler


    【解决方案1】:

    第一点是,如果有足够的资源(例如节点、CPU 和内存)可供 yarn 使用,它可以使用动态分配来创建具有适当默认内核和内存分配的 spark worker。

    在我的情况下,我需要关闭动态分配,因为我的资源水平非常低。

    所以我从 pyspark 设置了以下值:

    conf = (SparkConf().setAppName("simple")
            .set("spark.shuffle.service.enabled", "false")
            .set("spark.dynamicAllocation.enabled", "false")
            .set("spark.cores.max", "1")
            .set("spark.executor.instances","2")
            .set("spark.executor.memory","200m")
            .set("spark.executor.cores","1")
    

    注意:这里设置的值基本上应该小于实际可用资源。但是,此处的值太小可能会导致内存不足问题或作业运行时性能下降问题。

    The complete code gist of a sample job is available here

    对于这个 pyspark 案例,另一个需要注意的重点是 Spark on Yarn 可以在两种模式下运行

    1. 集群模式——spark驱动在spark主节点中运行
    2. 客户端模式 - spark 驱动程序从运行交互式 shell 的客户端运行。

    集群模式不太适合交互式使用 Spark。需要用户输入的 Spark 应用程序(例如 spark-shell 和 pyspark)需要 Spark 驱动程序在启动 Spark 应用程序的客户端进程内运行。

    客户端模式可以在如下环境中设置
    export PYSPARK_SUBMIT_ARGS='--master yarn --deploy-mode client pyspark-shell'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      相关资源
      最近更新 更多