Ars*_*nux 6 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中计算代码.
当我从网络中的另一台机器执行完全相同的命令时,状态再次为"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只是为了确保但没有成功(基于此链接),这表明:
在客户端上禁用防火墙:这是适用于我的解决方案.由于我正在研究原型内部代码,因此我在客户端节点上禁用了防火墙.出于某种原因,工作节点无法为我回复客户端.出于生产目的,您可能需要打开一定数量的端口.
这有两个已知的原因:
您的应用程序需要比分配更多的资源(内核、内存)。增加工作内核和内存应该可以解决这个问题。大多数其他答案都集中在这一点上。
在鲜为人知的地方,防火墙阻止了 master 和 worker 之间的通信。这可能会发生,尤其是您正在使用云服务。根据Spark Security 的说法,除了标准的 8080、8081、7077、4040 端口外,您还需要确保 master 和 worker 可以通过SPARK_WORKER_PORT,spark.driver.port和进行通信spark.blockManager.port;后三个用于提交作业并由程序随机分配(如果未配置)。您可以尝试打开所有端口以运行快速测试。