【问题标题】:TaskSchedulerImpl: Initial job has not accepted any resources;TaskSchedulerImpl:初始作业没有接受任何资源;
【发布时间】:2015-06-10 17:51:04
【问题描述】:

这就是我想要做的。

我创建了 DataStax 企业集群的两个节点,在这两个节点上我创建了一个 java 程序来获取一个表(Cassandra 数据库表)的计数。

这个程序是在 eclipse 中构建的,它实际上来自一个 windows 盒子。

在从 Windows 运行此程序时,它在运行时失败并出现以下错误:

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

相同的代码已在这些集群上成功编译并运行,没有任何问题。出现上述错误的原因可能是什么?

代码:

import org.apache.spark.SparkConf;

import org.apache.spark.SparkContext;

import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SchemaRDD;
import org.apache.spark.sql.cassandra.CassandraSQLContext;
import com.datastax.bdp.spark.DseSparkConfHelper;

public class SparkProject  {

    public static void main(String[] args) {

        SparkConf conf = DseSparkConfHelper.enrichSparkConf(new SparkConf()).setMaster("spark://10.63.24.14X:7077").setAppName("DatastaxTests").set("spark.cassandra.connection.host","10.63.24.14x").set("spark.executor.memory", "2048m").set("spark.driver.memory", "1024m").set("spark.local.ip","10.63.24.14X");

        JavaSparkContext sc = new JavaSparkContext(conf);

        CassandraSQLContext cassandraContext = new CassandraSQLContext(sc.sc());
        SchemaRDD employees = cassandraContext.sql("SELECT * FROM portware_ants.orders");

        //employees.registerTempTable("employees");
        //SchemaRDD managers = cassandraContext.sql("SELECT symbol FROM employees");
        System.out.println(employees.count());

        sc.stop();
    }
}

【问题讨论】:

标签: java apache-spark cassandra datastax


【解决方案1】:

我遇到了类似的问题,经过一些在线研究和反复试验,我将其缩小到 3 个原因(除了第一个,其他两个甚至没有接近错误消息):

  1. 如错误所示,您可能分配的资源超出了可用范围。 => 这不是我的问题
  2. 主机名和 IP 地址错误:我通过在 spark-env.sh 中指定 SPARK_MASTER_IP 和 SPARK_LOCAL_IP 解决了这个问题
  3. 在客户端禁用防火墙:这是对我有用的解决方案。由于我正在编写内部代码原型,因此我禁用了客户端节点上的防火墙。由于某种原因,工作节点无法为我与客户端对话。出于生产目的,您可能需要打开一定数量的端口。

【讨论】:

  • 就我而言,SPARK_LOCAL_IP 有所帮助。我通过 VPN 连接,并配置了不同的接口。当我将 SPARK_LOCAL_IP 设置为 VPN 接口时,错误消失了。
  • 在 Master 的 spark-env.sh 中 - 我设置了 SPARK_MASTER_IP。现在什么是 SPARK_LOCAL_IP 并且不会改变 Master 和 Worker 实例。无论如何,防火墙在两个实例上都被禁用。我仍然在 AWS EC2 上的提交 PySpark 应用程序方面遇到问题 - 出现初始作业失败错误 - 由于资源不可用,应用程序进入等待状态。让我知道是否有任何解决方法。问题在这里说明 - stackoverflow.com/questions/38359801/… @ameyamm
  • @oo_olo_oo SPARK_LOCAL_IP 应该设置为工人和司机对应的IP地址吧?
  • 我的问题是我试图用权限有限的用户运行,当我用 root 运行时,工作节点正确启动。
【解决方案2】:

我的问题是我分配的内存超出了我的奴隶可用的内存。尝试减少 spark 提交的内存大小。类似于以下内容:

~/spark-1.5.0/bin/spark-submit --master spark://my-pc:7077 --total-executor-cores 2 --executor-memory 512m

我的~/spark-1.5.0/conf/spark-env.sh 是:

SPARK_WORKER_INSTANCES=4
SPARK_WORKER_MEMORY=1000m
SPARK_WORKER_CORES=2

【讨论】:

  • 我有 1 个工作实例、2 个内核和 6gb 内存可用,我已为应用程序分配了 1 个内核和 1gb 的内存,同时提交时没有其他应用程序正在运行。尽管我面临问题 - 关于 AWS EC2 上的提交 PySpark 应用程序 - 出现初始作业失败错误 - 由于资源不可用,应用程序进入等待状态。让我知道是否有任何解决方法。问题在这里说明 - stackoverflow.com/questions/38359801/… @Sudipta Basak
【解决方案3】:

请看Russ的post

特别是本节:

这是迄今为止 Spark 新用户最常见的第一个错误 查看何时尝试运行新应用程序。我们新的和兴奋的 Spark 用户将尝试启动 shell 或运行自己的 shell 申请并收到以下消息

...

这个问题的短期解决方案是确保你没有 从集群中请求比现有资源更多的资源或关闭 任何不必要地使用资源的应用程序。如果你需要运行 多个 Spark 应用程序,那么您需要调整 每个应用程序使用的内核数量。

【讨论】:

  • 这已得到保证。 2 个内核和 1 个 Spark 应用程序在 6GB 内存上运行。我仍然在 AWS EC2 上的提交 PySpark 应用程序方面遇到问题 - 出现初始作业失败错误 - 由于资源不可用,应用程序进入等待状态。让我知道是否有任何解决方法。问题在这里说明 - stackoverflow.com/questions/38359801/… @phact
  • 嗨@ChaitanyaBapat - 你找到解决这个问题的方法了吗?
  • 不记得是 3 年前。必须使用重新启动/修复一些与网络相关的问题来解决它。对此感到抱歉。
【解决方案4】:

就我而言,问题是我在$SPARK_HOME/conf/spark-env.sh 中有以下行:

SPARK_EXECUTOR_MEMORY=3g

每个工人,
以及$SPARK_HOME/conf/spark-default.sh中的以下行

spark.executor.memory 4g

在“主”节点中。

一旦我将 4g 更改为 3g,问题就消失了。我希望这会帮助有同样问题的人。其他答案帮助我发现了这一点。

【讨论】:

    【解决方案5】:

    即使资源分配正确,我也遇到过几次这个问题。

    修复方法是重启 mesos 服务。

    sudo service mesos-slave restart
    sudo service mesos-master restart
    

    【讨论】:

      猜你喜欢
      • 2017-11-18
      • 2016-11-16
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多