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

Apache spark Spark独立连接驱动程序到工作程序,apache-spark,spark-submit,apache-spark-standalone,Apache Spark,Spark Submit,Apache Spark Standalone,我正在尝试本地托管spark独立群集。我在局域网上连接了两台异构计算机。下面列出的每个体系结构都在docker上运行。 我有以下配置 机器1上的主机(端口7077暴露) 机器1上的工人 机器2上的驱动程序 我使用一个测试应用程序打开一个文件并计算其行数。 当文件复制到所有Worker上,并且我使用SparkContext.readText() 但是,当我使用SparkContext.parallelize()在workers上访问文件时,该文件仅出现在worker上,我会显示以下内容: IN

我正在尝试本地托管spark独立群集。我在局域网上连接了两台异构计算机。下面列出的每个体系结构都在docker上运行。 我有以下配置

  • 机器1上的主机(端口7077暴露)
  • 机器1上的工人
  • 机器2上的驱动程序
我使用一个测试应用程序打开一个文件并计算其行数。 当文件复制到所有Worker上,并且我使用
SparkContext.readText()

但是,当我使用
SparkContext.parallelize()
在workers上访问文件时,该文件仅出现在worker上,我会显示以下内容:

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中添加哪些地址…)

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

通常,您必须确保所有节点(执行器和主节点)都可以到达驱动程序

  • 在集群模式下,如果驱动程序在其中一个执行器上运行,则默认情况下,只要没有为连接关闭任何端口(请参见下文),即可满足此要求
  • 在客户端模式下,启动驱动程序的机器必须可以从集群访问。这意味着
    spark.driver.host
    必须解析为一个可公开访问的地址
在这两种情况下,您必须记住,默认情况下,驱动程序在随机端口上运行。通过设置
spark.driver.port
,可以使用固定端口。显然,如果您想同时提交多个应用程序,那么这就不太好用了

此外:

当文件仅存在于worker上时


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

感谢您的回答,我认为问题在于网络上docker容器之间的通信。我最终使用
--net=host
选项启动了我的驱动程序和工作人员docker,并且成功了。这只是一个临时解决方案,因为它没有给我网络隔离。我现在正在研究docker以找到合适的解决方案。Hi@user6910411-出于某种原因,当我从本地计算机启动sparkContext到远程spark群集时,spark.driver.host的值是我的计算机的本地IP,显然无法从工作节点访问。如何解决这个问题?@nEO
spark.driver.host
(可选
spark.driver.bindAddress
)。