我有一个名为spark-docker的spark的docker镜像和卡桑德拉官方的docker镜像cassandra。我想从spark-docker运行一个spark-submit作业,它将在cassandra中写入数据。
spark-docker的Dockerfile如下:
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这将从dataset.tar中提取数据并将数据保存在cassandra中。
但是我得到了以下错误
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")})在我的python代码中,我做到了这一点:
from cassandra.cluster import Cluster
class CassandraSchemaGenerator:
def __init__(self, keyspace):
self.keyspace = keyspace
self.cluster = Cluster()
self.cluster_conn = self.cluster.connect()如何获取运行cassandra的IP地址和端口号,并将其放入我的python代码中,以便连接到cassandra?
发布于 2019-01-23 21:19:19
除非您不使用network=host,否则不能使用127.0.0.1从一个容器连接到另一个容器。
因此,您可以执行以下操作之一:
启动容器时切换到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
https://stackoverflow.com/questions/54327807
复制相似问题