docker spark群集上容器之间的spark应用程序套接字通信

docker spark群集上容器之间的spark应用程序套接字通信,docker,apache-spark,spark-streaming,Docker,Apache Spark,Spark Streaming,所以我在Docker中使用Docker Compose运行了一个Spark集群。我用的是图像 然后我又添加了两个容器,一个作为服务器(普通python),一个作为客户端(spark streaming app)。它们都在同一个网络上运行 对于服务器(普通python),我有如下内容 import socket s.bind(('', 9009)) s.listen(1) print("Waiting for TCP connection...") wh

所以我在Docker中使用Docker Compose运行了一个Spark集群。我用的是图像

然后我又添加了两个容器,一个作为服务器(普通python),一个作为客户端(spark streaming app)。它们都在同一个网络上运行

对于服务器(普通python),我有如下内容

import socket
s.bind(('', 9009))
    s.listen(1)
    print("Waiting for TCP connection...")
    while True:
        # Do and send stuff
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?
对于我的客户(spark应用程序),我有

import socket
s.bind(('', 9009))
    s.listen(1)
    print("Waiting for TCP connection...")
    while True:
        # Do and send stuff
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?

那么,港口的价值是什么?它是容器docker inspect的IP地址值吗?

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

docker inspect <container_id>
然后在我的脚本(容器2)中:

conf=SparkConf()
conf.setAppName(“MyApp”)
sc=SparkContext(conf=conf)
sc.setLogLevel(“错误”)
ssc=StreamingContext(sc,2)
ssc.检查点(“我的检查点”)
#从端口9009读取数据
dataStream=ssc.sockettexstream(“container-1”,9009)#在此处输入容器名称

我还公开了Dockerfile中的套接字端口,我不知道这是否有效

你能检查一下单独使用服务名是否也可以吗?我很好奇(并且认为它更灵活,因为IPs可以改变每次重启)。@JacekLaskowski理论上它也会工作,我会尝试一下,并在这里通知它