Spark错误:初始作业未接受任何资源;检查群集UI以确保工作人员已注册并具有足够的资源

时间:2016-10-11 10:36:33

标签: scala apache-spark

我有一台虚拟机,其中安装了独立模式的spark-2.0.0-bin-hadoop2.7。

我跑./sbin/start-all.sh来运行主人和奴隶。

当我在机器本身./bin/spark-shell --master spark://192.168.43.27:7077 --driver-memory 600m --executor-memory 600m --executor-cores 1时,任务的状态为RUNNING,我能够在spark shell中计算代码。

ran spark shell in virtual machine

当我从网络中的另一台机器执行完全相同的命令时,状态再次为“RUNNING”,但spark-shell抛出WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources。我猜这个问题与资源没有直接关系,因为相同的命令在虚拟机本身中起作用,但在来自其他机器时却不起作用。

ran spark shell through another machine in the network

我检查了与此错误相关的大多数主题,但没有一个解决了我的问题。我甚至禁用sudo ufw disable防火墙只是为了确保但没有成功(基于this link)暗示:

  

在客户端上禁用防火墙:这是适用于我的解决方案。由于我正在研究原型内部代码,因此我在客户端节点上禁用了防火墙。出于某种原因,工作节点无法为我回复客户端。出于生产目的,您需要打开一定数量的端口。

2 个答案:

答案 0 :(得分:4)

有两个已知原因:

  1. 您的应用程序需要的资源(核心,内存)多于分配的资源。增加工作者核心和内存应该解决它。大多数其他答案都集中于此。

  2. 在不太知名的情况下,防火墙阻止了主人和工人之间的通信。这可能发生,尤其是您正在使用云服务。根据{{​​3}},除了标准的8080,8081,7077,4040端口,您还需要确保主人和工作人员可以通过SPARK_WORKER_PORTspark.driver.port和{{1}进行通信};后三者用于提交作业,由程序随机分配(如果未配置)。您可以尝试打开所有端口以进行快速测试。

答案 1 :(得分:0)

添加@ Fountaine007的第一个项目符号示例。

我遇到了同样的问题,这是因为分配的vcore小于应用程序的预期。

对于我的特定情况,我在yarn.nodemanager.resource.cpu-vcores下增加了$HADOOP_HOME/etc/hadoop/yarn-site.xml的值。

对于与内存相关的问题,您可能还需要修改yarn.nodemanager.resource.memory-mb