WARN cluster.YarnScheduler:初始作业未接受任何资源

时间:2017-06-16 05:40:11

标签: apache-spark pyspark yarn taskscheduler

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

  

17/06/16 11:10:43 WARN cluster.YarnScheduler:初始工作没有   接受任何资源;检查您的群集UI以确保工作人员   已注册且资源充足

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

我正在从pyspark发布工作。

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

1 个答案:

答案 0 :(得分:2)

首先,如果有足够的资源(如节点,CPU和内存可用于纱线),它可以使用动态分配来创建具有适当默认核心和内存分配的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主节点中运行
  2. 客户端模式 - 从运行交互式shell的客户端运行spark驱动程序。
  3. 群集模式不适合以交互方式使用Spark。需要用户输入的Spark应用程序(例如spark-shell和pyspark)需要Spark驱动程序在启动Spark应用程序的客户端进程内运行。

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