如何将 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 参数):

只需使用DSE容器的内部IP: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?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PySpark 连接到 Bigquery

在 pyspark 中,如何将字符串添加/连接到列?

如何将 Rails 应用程序连接到主机上的 docker postgres

如何将在 Docker 容器中运行的 Grafana 连接到在主机上运行的 Prometheus 数据源(在 Docker for Mac 上)?

在 Pyspark 中将 Sqoop 连接到 Hadoop

如何将我的 docker 连接到远程数据库?