Spark独立连接驱动程序到工作者

时间:2018-01-16 21:10:36

标签: apache-spark spark-submit apache-spark-standalone

我正在尝试在本地托管一个Spark独立群集。我在LAN上连接了两台异构机器。下面列出的每个架构都在docker上运行。 我有以下配置

  • 机器1上的主机(端口7077暴露)
  • 机器1上的工人
  • 机器2上的驱动程序

我使用一个打开文件并计算其行数的测试应用程序。 当文件在所有工作人员上复制并且我使用SparkContext.readText()

时,该应用程序可以正常工作

但是当我在工作时使用SparkContext.parallelize()访问文件时文件只出现在工人身上时,我有以下显示:

INFO StandaloneSchedulerBackend: Granted executor ID app-20180116210619-0007/4 on hostPort 172.17.0.3:6598 with 4 cores, 1024.0 MB RAM
INFO StandaloneAppClient$ClientEndpoint: Executor updated: app-20180116210619-0007/4 is now RUNNING
INFO StandaloneAppClient$ClientEndpoint: Executor updated: app-20180116210619-0007/4 is now EXITED (Command exited with code 1)
INFO StandaloneSchedulerBackend: Executor app-20180116210619-0007/4 removed: Command exited with code 1
INFO StandaloneAppClient$ClientEndpoint: Executor added: app-20180116210619-0007/5 on worker-20180116205132-172.17.0.3-6598 (172.17.0.3:6598) with 4 cores```

在没有实际计算应用程序的情况下再次继续。

当我将驱动程序放在与工作程序相同的PC上时,这是有效的。所以我想在网络上允许两者之间存在某种连接。你知道一种方法吗(打开哪些端口,在/ etc / hosts中添加哪个地址......)

1 个答案:

答案 0 :(得分:2)

TL; DR 确保可以从群集中的每个节点访问spark.driver.host:spark.driver.port

通常,您必须确保所有节点(执行程序和主服务器)都可以访问驱动程序。

  • 在集群模式下,驱动程序在其中一个执行程序上运行,默认情况下会满足,只要没有为连接关闭端口(参见下文)。
  • 在客户端模式计算机中,必须可以从群集访问已启动驱动程序的计算机。这意味着spark.driver.host必须解析为可公开访问的地址。

在这两种情况下,您都必须记住,默认情况下,驱动程序在随机端口上运行。通过设置spark.driver.port可以使用固定的。如果你想同时提交多个应用程序,显然这不能很好地工作。

此外:

  

何时文件仅存在于工作人员

不起作用。所有输入都必须可以从驱动程序以及每个执行程序节点访问。