我有一个名为spark spark-docker
的spark码头工人镜像和cassandra官方docker镜像cassandra
。我想从spark-docker
运行一个火花提交作业,它将在cassandra中写入数据。
Dockerfile
的{{1}}如下:
spark-docker
我正在使用以下命令来做到这一点。
FROM bde2020/spark-python-template:2.4.0-hadoop2.7
MAINTAINER Rafiul
RUN pip install --upgrade pip
RUN pip install pyspark cassandra-driver
这将从docker run -ti --network=dockers_default spark-dcoker:latest /spark/bin/spark-submit --conf spark.cassandra.connection.host=cassandra --packages datastax:spark-cassandra-connector:2.4.0-s_2.11 /app/data_extractor.py -f /app/dataset.tar
中提取数据,并将数据保存在cassandra中。
但是我遇到了以下错误
dataset.tar
在我的python代码中,我这样做:
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
如何获取运行cassandra的IP地址和端口号并将其放入我的python代码中,以便它可以连接到cassandra?
答案 0 :(得分:1)
除非您不使用127.0.0.1
,否则不能使用network=host
从一个容器连接到另一个容器。
因此,您执行以下操作之一:
启动容器时切换到network=host
模式(此模式不需要端口暴露)
或者(更好)将两个容器加入网络中,并使用容器名称作为主机名称来在它们之间进行连接:
docker network create foo
docker run --network=foo -d --name=cassy cassandra
docker run --network=foo -ti --name=spark spark-docker:latest ...
请注意name
参数-这允许容器使用易于理解的名称。
现在,您可以从spark
使用主机名cassy
而不是ip连接到cassandra