apache-spark - 如何将 Pyspark 连接到在 docker 上运行的 datastax Cassandra?
问题描述
我在 Docker 上运行 Datastax Cassandra,并在 Datastax Cassandra 上创建表,但我想用这个 docker-compose.yml 安装 Pyspark 容器,但我不知道如何设置 docker-compose.yml 文件的网络将 Datastax Cassandra 和 Pyspark 容器连接在一起。
这是 docker-compose.yml 用于运行 pyspark :
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 以从中读取数据。
解决方案
默认情况下,如果两个容器都由它启动,docker-compose 应该设置公共网络spark.cassandra.connection.host
,因此您可以使用 DSE 容器名称作为参数。
如果这两个容器都不是由 docker-compose 维护的,那么您可以(您需要spark.cassandra.connection.host
正确设置参数):
- 只需使用 DSE 容器的内部 IP:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-dse
- 使用旧版 Docker 链接(不推荐,真的)并使用 DSE 容器名称进行连接
- 使用
docker network connect
(参见文档),以及 DSE 容器名称 - 启动 DSE Docker 镜像,端口 9042 对外暴露,并使用主机 IP 进行连接
PS 如果你在 Jupyter 容器中有 pyspark,那么你不需要传递-k
标志,因为它也会在 DSE 上启动 Spark,而且它对于 4Gb 的 RAM 不是很好。此外,如果您不需要 DSE Graph,请移除该-g
开关。
推荐阅读
- python - 在 python 中使用 selenium chromedriver
- html - 使用 SQL、XML 和 HTML 生成 ERD 图
- python-3.x - 从给定列表中查找包含子字符串的字符串
- arrays - Applescript:使用 Bash 从序列文件中查找丢失的文件
- python - 在 Flask 应用程序中初始化 Firestore-Admin
- html - 没有硬刷新,视频自动播放不起作用
- geometry - 球体表面上的均匀空间箱
- variables - 通过引用另一个变量来分配变量
- mysql - 如何将一个列/表中的多个日期的逻辑应用于另一列/表中的多个日期?
- phpunit - Travis CI 是否检查多个 .travis.yml 文件?