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

这是我想要做的。

我创建了两个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(); } } 

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

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

我的问题是我分配的内存比我的奴隶可用的内存多。 尝试减少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 

请看看Russ的post

具体这一部分:

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

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

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

SPARK_EXECUTOR_MEMORY =3克

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

spark.executor.memory 4g

在“主”节点中。

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

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

解决方法是重启mesos服务。

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