docker spark 集群上容器之间的 spark app 套接字通信

spark app socket communication between container on docker spark cluster

所以我在 Docker 中使用 Docker Compose 有一个 Spark 集群 运行ning。我正在使用 docker-spark 图片。

然后我再添加 2 个容器,1 个作为服务器(普通 python),1 个作为客户端(spark 流应用程序)。他们都 运行 在同一个网络上。

对于服务器(普通 python)我有类似的东西

import socket
s.bind(('', 9009))
    s.listen(1)
    print("Waiting for TCP connection...")
    while True:
        # Do and send stuff

对于我的客户(spark 应用程序),我有类似的东西

conf = SparkConf()
conf.setAppName("MyApp")

sc = SparkContext(conf=conf)
sc.setLogLevel("ERROR")
ssc = StreamingContext(sc, 2)
ssc.checkpoint("my_checkpoint")
# read data from port 9009
dataStream = ssc.socketTextStream(PORT, 9009)
# What's PORT's value?

那么 PORT 的价值是多少?它是 docker 检查容器的 IP 地址值吗?

好吧,我发现我可以使用容器的 IP,只要我的所有容器都在同一个网络上。 所以我通过 运行

检查 IP
docker inspect <container_id>

并检查 IP,并将其用作我的套接字的主机

编辑: 我知道有点晚了,但我刚刚发现我实际上可以使用容器的名称,只要它们在同一个网络中

更多编辑:

我在 docker 中进行了更改-撰写如下:

container-1:
    image: image-1
    container_name: container-1
    networks:
      - network-1
container-2:
    image: image-2
    container_name: container-2
    ports:
      - "8000:8000"
    networks:
      - network-1

然后在我的脚本中(容器 2):

conf = SparkConf()
conf.setAppName("MyApp")

sc = SparkContext(conf=conf)
sc.setLogLevel("ERROR")
ssc = StreamingContext(sc, 2)
ssc.checkpoint("my_checkpoint")
# read data from port 9009

dataStream = ssc.socketTextStream("container-1", 9009) #Put container's name here

我也在Dockerfile中暴露了socket端口,不知道有没有效果