docker spark群集上容器之间的spark应用程序套接字通信
所以我在Docker中使用Docker Compose运行了一个Spark集群。我用的是图像 然后我又添加了两个容器,一个作为服务器(普通python),一个作为客户端(spark streaming app)。它们都在同一个网络上运行 对于服务器(普通python),我有如下内容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
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理论上它也会工作,我会尝试一下,并在这里通知它