如何将 Pyspark 连接到在 docker 上运行的 datastax Cassandra?
Posted
技术标签:
【中文标题】如何将 Pyspark 连接到在 docker 上运行的 datastax Cassandra?【英文标题】:How to Connect Pyspark to datastax Cassandra that is running on the docker? 【发布时间】:2021-02-03 09:26:13 【问题描述】:我在 Docker 上运行 Datastax Cassandra,我在 Datastax Cassandra 上创建了我的表,但我想用这个 docker-compose.yml 安装 Pyspark 容器,但我不知道如何设置 docker-compose 的网络.yml 文件将 Datastax Cassandra 和 Pyspark 容器连接在一起。
这是用于运行 pyspark 的 docker-compose.yml :
spark:
image: jupyter/pyspark-notebook
container_name: pyspark
ports:
- "8888:8888"
- "4040:4040"
- "4041:4041"
- "4042:4042"
expose:
- "8888"
- "4040"
- "4041"
- "4042"
environment:
CHOWN_HOME: "yes"
GRANT_SUDO: "yes"
NB_UID: 1000
NB_GID: 100
deploy:
replicas: 1
restart_policy:
condition: on-failure
volumes:
- ./Documents:/home/jovyan/work
,这是用于创建 Datastax Cassandra 容器的 docker 命令:
docker run \
-e \
DS_LICENSE=accept \
--memory 4g \
--name my-dse \
-d \
-v /Documents/datastax/cassandra:/lib/cassandra \
-v /Documents/datastax/spark:/lib/spark \
-v /Documents/datastax/dsefs:/lib/dsefs \
-v /Documents/datastax/log/cassandra:/log/cassandra \
-v /Documents/datastax/log/spark:/log/spark \
-v /Documents/datastax/config:/config \
-v /Documents/datastax/opscenter:/lib/opscenter \
-v /Documents/datastax/datastax-studio:/lib/datastax-studio \
datastax/dse-server:6.8.4 \
-g \
-s \
-k
请帮助我编写 docker-compose.yml 以运行连接的 Pyspark 到 Cassandra Datastax 以从中读取数据。
【问题讨论】:
【参考方案1】:默认情况下,如果两个容器都由它启动,docker-compose 应该设置common network,因此您可以使用 DSE 容器名称作为spark.cassandra.connection.host
参数。
如果这两个容器都不是由 docker-compose 维护的,那么你可以(你需要正确设置 spark.cassandra.connection.host
参数):
docker inspect -f 'range.NetworkSettings.Networks.IPAddressend' my-dse
使用legacy Docker links(不推荐,真的)并使用 DSE 容器名称进行连接
使用docker network connect
(参见documentation)以及DSE 容器名称
启动 DSE Docker 镜像,端口 9042 对外暴露,并使用主机 IP 进行连接
附:如果你在 Jupyter 容器中有 pyspark,那么你不需要传递 -k
标志,因为它也会在 DSE 上启动 Spark,而且它对于 4Gb 的 RAM 不是很好。另外,如果您不需要 DSE Graph,请移除 -g
开关。
【讨论】:
以上是关于如何将 Pyspark 连接到在 docker 上运行的 datastax Cassandra?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Rails 应用程序连接到主机上的 docker postgres
如何将在 Docker 容器中运行的 Grafana 连接到在主机上运行的 Prometheus 数据源(在 Docker for Mac 上)?