繁体   English   中英

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

[英]Spark standalone connection driver to worker

我正在尝试在本地托管Spark独立集群。 我在局域网上连接了两台异构计算机。 下面列出的每个架构都在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中添加哪个地址...)

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

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

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

在这两种情况下,都必须记住,默认情况下,驱动程序在随机端口上运行。 通过设置spark.driver.port可以使用固定的。 显然,如果您想同时提交多个申请,这将无法很好地解决问题。

此外:

当文件仅存在于工作程序上时

将无法正常工作。 必须从驱动程序以及每个执行程序节点访问所有输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM