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端口,不知道有没有效果
所以我在 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,只要我的所有容器都在同一个网络上。 所以我通过 运行
检查 IPdocker 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端口,不知道有没有效果