【问题标题】:Choosing range of ports in spark在火花中选择端口范围
【发布时间】:2019-03-11 02:29:46
【问题描述】:

从 spark 文档中,我知道执行程序(即工作程序)用于与 master 建立连接的端口(因为默认情况下每个工作程序只有一个执行程序)是随机确定的,但是我如何设置它们的范围来发布这些端口在码头工人。此外,如果工作人员与另一个容器(不是分布式系统的一部分)建立连接,我是否需要发布工作人员将从容器中获取返回数据的端口(例如,通过 https 请求)? 请注意,我不使用 docker-compose.yml 因为我不需要将容器设置为服务,并且我想在需要时通过增加/减少客户数量来添加/删除容器。

【问题讨论】:

  • 只需将所有容器放在同一个docker网络中,就不用担心暴露端口了。
  • 每个worker可以有多个executor。

标签: docker apache-spark pyspark


【解决方案1】:

您应该为所有相互通信的容器使用相同的 docker 网络。容器可以使用容器名称(在所有端口上)访问其他人,就像网络上的不同主机一样。

创建一个网络(只需要一次)

docker network create <network_name>

当您启动容器时,使用--network 将容器连接到网络

docker run --network=<network_name> --name <container_name> <image>

您还可以将现有容器连接到网络

docker network connect <network_name> <container_name>

参考:
https://docs.docker.com/engine/reference/commandline/network_create/
https://docs.docker.com/engine/reference/run/

【讨论】:

  • 分布式系统之外的容器呢,例如与 API 的端点通信?我应该发布端口(例如端点上的 5000 和工作人员上的 46512)还是应该只在端点 API 上发布端口?
  • 你只需要暴露哪些将从docker网络外部访问。在我的 hadoop-spark 设置中,我在资源管理器上公开端口 8088(以检查正在运行的作业),在名称节点容器上公开端口 50070(以检查 hdfs 上的文件)。由于 docker 网络,容器可以在所有端口上相互通信,因此无需暴露其他端口。
  • 我不明白你所说的端点通信是什么意思?您是否在将从外部访问的容器上运行其他服务(除了 hadoop/spark 服务)?
  • 抱歉含糊不清。我的意思是,例如火花工作者将连接到运行烧瓶服务器的容器。我知道我需要在包含烧瓶服务器的容器上发布一个端口,但是我是否还需要在 spark worker 上发布一个端口(以便工作器和带有烧瓶服务器的容器可以通信)?我希望这次我更清楚了。
  • 您不需要在 spark worker 容器上发布任何端口。您可以在烧瓶容器上公开端口,或者将烧瓶容器连接到同一网络(推荐)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2019-05-10
相关资源
最近更新 更多