【发布时间】:2019-06-15 19:34:48
【问题描述】:
我正在解压缩 json 中的 tar 文件,然后使用 spark(2.4.0) 和 cassandra(3.11) 将这些 json 文件保存在 cassandra 中。我正在使用 docker 容器运行 pyspark,并且我在本地运行了 cassandra。
我在 docker 中有一个 bash 脚本 data_extractor.sh,其中包含
$SPARK_HOME/bin/spark-submit --packages datastax:spark-cassandra-connector:2.4.0-s_2.11 data_extractor.py -f $1
我正在使用 docker 运行
docker run -it spark-docker data_extractor.sh data.tar
当我运行 spark-submit 时;它执行解压缩任务但无法连接到 cassandra 数据库(我在 pyspark 中使用 cassandra-driver 并使用 cassandra -f 运行 cassandra)
我收到以下错误:
Start building Cassandra schemas.
Traceback (most recent call last):
File "/app/data_extractor.py", line 83, in <module>
schema_builder = CassandraSchemaGenerator(keyspace)
File "/app/cql_schema_creator.py", line 8, in __init__
self.cluster_conn = self.cluster.connect()
File "cassandra/cluster.py", line 1278, in cassandra.cluster.Cluster.connect
File "cassandra/cluster.py", line 1314, in cassandra.cluster.Cluster.connect
File "cassandra/cluster.py", line 1301, in cassandra.cluster.Cluster.connect
File "cassandra/cluster.py", line 2802, in cassandra.cluster.ControlConnection.connect
File "cassandra/cluster.py", line 2845, in cassandra.cluster.ControlConnection._reconnect_internal
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")})
我在以下代码中遇到错误:
from cassandra.cluster import Cluster
class CassandraSchemaGenerator:
def __init__(self, keyspace):
self.keyspace = keyspace
self.cluster = Cluster(['127.0.0.1'], port=9042)
self.cluster_conn = self.cluster.connect()
这是我的 docker 文件:https://pastebin.com/nSkxZ2Au
我的问题是:
如果我在 docker 中运行 pyspark,在本地运行 cassandra,如何解决这个问题?
有什么方法可以在同一个容器中同时运行 spark 和 cassandra 并且运行时不会出错?
我在 python 代码和/或 cassandra 设置中做错了吗?如果是,如何解决?
我已经尝试了几个 Dockerfile 来实现第二点,但都失败了。另外,这是我第一次使用 spark 和 cassandra,所以把我当作菜鸟吧。
谢谢。
【问题讨论】:
标签: python docker apache-spark cassandra pyspark