【问题标题】:Running a Job on Spark 0.9.0 throws error在 Spark 0.9.0 上运行作业会引发错误
【发布时间】:2014-03-07 18:43:52
【问题描述】:

我安装了一个 Apache Spark 0.9.0 集群,我试图部署一个从 HDFS 读取文件的代码。这段代码会引发警告,最终作业会失败。这是代码

/**
 * running the code would fail 
 * with a warning 
 * Initial job has not accepted any resources; check your cluster UI to ensure that 
 * workers are registered and have sufficient memory
 */

object Main extends App {
    val sconf = new SparkConf()
    .setMaster("spark://labscs1:7077")
    .setAppName("spark scala")
    val sctx = new SparkContext(sconf)
    sctx.parallelize(1 to 100).count
}

以下是警告信息

初始作业没有接受任何资源;检查您的集群 UI 以 确保工人已注册并有足够的内存

如何摆脱这个或者我错过了一些配置。

【问题讨论】:

  • 你解决了吗?
  • 正如 samthebest 指出的那样,检查您的内存和内核。我今天看到了同样的错误,并意识到我的工人只分配了 64m,默认 spark.executor.memory 是 512m。它一直在等待具有可用内存的工作人员。更改工作人员内存设置使其工作。
  • @SKP 我遇到了同样的问题,你是如何更改工作人员内存设置的?
  • 例如3GB conf.set("spark.executor.memory", "3000m")

标签: java scala hdfs apache-spark


【解决方案1】:

Spark master 似乎无法为此任务分配任何工作人员。要么工人没有开始工作,要么他们都很忙。

检查主节点上的 Spark UI(spark-env.sh 中的SPARK_MASTER_WEBUI_PORT 指定的端口,默认为 8080)。它应该是这样的:

为了集群正常运行:

  • 一定有一些工人的状态是“活着”
  • 必须有一些内核可用(例如,如果所有内核都忙于冻结的任务,则集群不会接受新任务)
  • 必须有足够的可用内存

【讨论】:

  • 我在 webUI 上检查了它有唤醒者,但每个只有 1 GB 内存
  • @prassee:应该够了。该内存是空闲的还是已使用的?单击单个工作人员并检查日志可能会有所帮助。
  • 尝试在您尝试运行代码的同一台机器上运行MASTER=spark://labscs1:7077 spark-shell。 Spark 控制台中的代码相同:sc.parallelize(1 to 100).count。有用吗?
【解决方案2】:

当您通过设置 spark.cores.maxspark.executor.memory resp' 请求的内核数或 RAM 量(每个节点)超过可用值时,您会得到此信息。因此,即使没有其他人在使用集群,并且您指定要使用,例如每个节点 100GB RAM,但您的节点只能支持 90GB,您也会收到此错误消息。

公平地说,在这种情况下,信息是模糊的,如果它说你超过了最大值会更有帮助。

【讨论】:

    【解决方案3】:

    还要确保您的 spark 工作人员可以与司机进行双向沟通。检查防火墙等。

    【讨论】:

      【解决方案4】:

      您需要指定正确的 SPARK_HOME 和驱动程序的 IP 地址,以防 Spark 可能无法找到您的 Netty jar 服务器。请注意,您的 Spark 主服务器应该侦听您想使用的正确 IP 地址。这可以通过在文件 spark-env.sh 中设置 SPARK_MASTER_IP=yourIP 来完成。

         val conf = new SparkConf()
        .setAppName("test")
        .setMaster("spark://yourSparkMaster:7077")
        .setSparkHome("YourSparkHomeDir")
        .set("spark.driver.host", "YourIPAddr")
      

      【讨论】:

        【解决方案5】:

        检查有关主机名、IP 地址和环回的错误。确保设置SPARK_LOCAL_IPSPARK_MASTER_IP

        【讨论】:

          【解决方案6】:

          我有这个确切的问题。我有一个简单的 1 节点 Spark 集群,但在尝试运行我的 Spark 应用程序时遇到此错误。

          我浏览了上面的一些建议,当我尝试对集群运行 Spark shell 并且无法在 UI 中看到这一点时,我开始怀疑我的集群无法正常工作。

          在我的 hosts 文件中,我有一个条目,比如说 SparkNode,它引用了正确的 IP 地址。

          我无意中在conf/spark-env.sh 文件中针对SPARK_MASTER_IP 变量输入了错误的IP 地址。我将其更改为SparkNode,我还将SPARK_LOCAL_IP 更改为指向SparkNode

          为了测试这一点,我在浏览器中使用SparkNode:7077 打开了 UI,我可以看到 Spark 实例正在运行。

          然后我使用 Wildfires 建议运行 Spark shell,如下所示:

          MASTER=spark://SparkNode:7077 bin/spark-shell
          

          回到 UI,我现在可以看到 Spark shell 应用程序正在运行,这是我以前看不到的。

          所以我退出了 Spark shell 并使用 Spark Submit 运行了我的应用程序,它现在可以正常工作了。

          检查所有 IP 和主机条目绝对值得,这是我的问题的根本原因。

          【讨论】:

            【解决方案7】:

            我有类似的问题初始作业没有接受任何资源,通过在 spark-env.sh 上指定 spark 正确的下载 url 或在所有从站上安装 spark 来修复它。

            export SPARK_EXECUTOR_URI=http://mirror.fibergrid.in/apache/spark/spark-1.6.1/spark-1.6.1-bin-hadoop2.6.tgz
            

            初始作业没有接受任何资源;检查您的集群 UI 以确保工作人员已注册并有足够的内存

            【讨论】:

              猜你喜欢
              • 2018-10-29
              • 2015-12-26
              • 1970-01-01
              • 2015-03-23
              • 2019-05-17
              • 2014-12-20
              • 1970-01-01
              • 1970-01-01
              • 2021-07-14
              相关资源
              最近更新 更多