我有一台虚拟机,其中安装了独立模式的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中计算代码。
当我从网络中的另一台机器执行完全相同的命令时,状态再次为“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
。我猜这个问题与资源没有直接关系,因为相同的命令在虚拟机本身中起作用,但在来自其他机器时却不起作用。
我检查了与此错误相关的大多数主题,但没有一个解决了我的问题。我甚至禁用sudo ufw disable
防火墙只是为了确保但没有成功(基于this link)暗示:
在客户端上禁用防火墙:这是适用于我的解决方案。由于我正在研究原型内部代码,因此我在客户端节点上禁用了防火墙。出于某种原因,工作节点无法为我回复客户端。出于生产目的,您需要打开一定数量的端口。
答案 0 :(得分:4)
有两个已知原因:
您的应用程序需要的资源(核心,内存)多于分配的资源。增加工作者核心和内存应该解决它。大多数其他答案都集中于此。
在不太知名的情况下,防火墙阻止了主人和工人之间的通信。这可能发生,尤其是您正在使用云服务。根据{{3}},除了标准的8080,8081,7077,4040端口,您还需要确保主人和工作人员可以通过SPARK_WORKER_PORT
,spark.driver.port
和{{1}进行通信};后三者用于提交作业,由程序随机分配(如果未配置)。您可以尝试打开所有端口以进行快速测试。
答案 1 :(得分:0)
添加@ Fountaine007的第一个项目符号示例。
我遇到了同样的问题,这是因为分配的vcore小于应用程序的预期。
对于我的特定情况,我在yarn.nodemanager.resource.cpu-vcores
下增加了$HADOOP_HOME/etc/hadoop/yarn-site.xml
的值。
对于与内存相关的问题,您可能还需要修改yarn.nodemanager.resource.memory-mb
。