如何解决如何将Pyspark连接到在docker上运行的datastax Cassandra?
我在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,以从中读取数据。
解决方法
默认情况下,如果两个容器都由docker-compose启动,则应该设置common network,因此您可以仅将DSE容器名称用作spark.cassandra.connection.host
参数。
如果两个容器都不由docker-compose维护,则可以(您需要正确设置spark.cassandra.connection.host
参数):
- 只需使用DSE容器的内部IP:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-dse
- 使用legacy Docker links(确实不建议使用),并使用DSE容器名称进行连接
- 使用
docker network connect
(请参阅documentation)以及DSE容器名称 - 使用端口9042暴露在外部来启动DSE Docker映像,并使用主机的IP进行连接
P.S。如果在Jupyter容器中有pyspark,则不需要传递-k
标志,因为它也会在DSE上启动Spark,并且对于4Gb RAM来说效果不是很好。另外,如果不需要DSE图表,请删除-g
开关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。