TaskSchedulerImpl: 初始作业未接受任何资源;

11

这是我要做的事情。

我创建了两个 DataStax Enterprise 集群节点,并在其上创建了一个 Java 程序来获取一个表(Cassandra 数据库表)的计数。

此程序是在来自 Windows 计算机的 Eclipse 中构建的。

从 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();
    }
}

请看 https://dev59.com/iaLia4cB1Zd3GeqPmKO3#44581586。 - Santanu Dey
5个回答

23

我遇到了类似的问题,在一些在线研究和试错后,我找出了导致该问题的三个原因(除了第一个,其他两个与错误信息并不相近):

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

在我的情况下,SPARK_LOCAL_IP有所帮助。我通过VPN连接,并配置了不同的接口。当我将SPARK_LOCAL_IP设置为VPN接口时,错误消失了。 - oo_olo_oo
在Master的spark-env.sh中 - 我已经设置了SPARK_MASTER_IP。现在SPARK_LOCAL_IP是什么,难道Master和Worker实例不会改变吗?无论如何,两个实例上的防火墙都已禁用。但我在AWS EC2上提交PySpark应用程序时仍然遇到问题 - 获取“Initial job failed”错误 - 应用程序因资源不可用而进入等待状态。如果有任何解决方法,请告诉我。问题在这里说明 - https://dev59.com/l5jga4cB1Zd3GeqPQ-hX - Chaitanya Bapat
@oo_olo_oo SPARK_LOCAL_IP 应该设置为工作节点和驱动程序的相应 IP 地址,对吗? - Chaitanya Bapat
我的问题是我试图使用权限受限的用户运行,当我使用root运行时,工作节点正确启动了。 - Hardy

7

我的问题是我给我的从节点分配了比它们可用的内存还要多。尝试减少Spark Submit的内存大小。像下面这样:

~/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应用程序 - 出现初始作业失败错误 - 应用程序由于资源不足而进入等待状态。如果有任何解决方法,请告诉我。问题在这里说明 - https://dev59.com/l5jga4cB1Zd3GeqPQ-hX @Sudipta Basak - Chaitanya Bapat

3
请查看Russ的帖子 具体来说,是这一部分:

这绝对是新Spark用户在尝试运行新应用程序时会遇到的最常见的第一个错误。我们的新鲜和兴奋的Spark用户将尝试启动shell或运行自己的应用程序,并收到以下消息:

...

解决此问题的短期解决方案是确保您没有从群集中请求比存在的资源更多的资源,或关闭任何不必要使用资源的应用程序。如果您需要同时运行多个Spark应用程序,则需要调整每个应用程序使用的核心数量。


这已经得到保证。2个核心和1个Spark应用程序在6GB内存上运行。但是,我在AWS EC2上提交PySpark应用程序时仍然遇到问题 - 出现初始作业失败错误 - 应用程序由于资源不可用而进入等待状态。如果有任何解决方法,请告诉我。问题在这里说明 - https://dev59.com/l5jga4cB1Zd3GeqPQ-hX - Chaitanya Bapat
嗨@ChaitanyaBapat - 你找到解决这个问题的方法了吗? - nEO
不记得是3年前的事了。可能是通过重新启动或修复一些网络相关问题来解决的。对此感到抱歉。 - Chaitanya Bapat

0

我曾经遇到过这个问题,即使资源分配是正确的。

解决方法是重新启动Mesos服务。

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

0
在我的情况下,问题是我在$SPARK_HOME/conf/spark-env.sh中有以下行:

SPARK_EXECUTOR_MEMORY=3g

每个worker都有这样的设置,
而在$SPARK_HOME/conf/spark-default.sh中有以下行:

spark.executor.memory 4g

在“master”节点上。

一旦我将4g更改为3g,问题就解决了。我希望这能帮助遇到同样问题的人。其他答案帮助我发现了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接