无法连接到 Docker 中的 Cassandra,使用 cqlsh 获取“无法连接到任何服务器”

问题描述 投票:0回答:1

我正在尝试使用 PySpark 和 Docker 构建一个容器化的小批量数据处理管道,之后处理的数据将存储在 Cassandra 中。我正在使用一个 docker-compose 文件来为 spark 和 Cassandra 拉取图像,我能够毫无错误地运行我的 pyspark 文件,但是在尝试运行 cassandra 行时出现错误,例如创建键空间和表,这就是我尝试的原因在容器中使用 cqlsh 之后出现以下错误

Connection error: ('Unable to connect to any servers', { \
  '127.0.0.1:9042': ConnectionRefusedError(111, "Tried connecting to \
  [('127.0.0.1', 9042)]. Last error: Connection refused")})

docker 命令:-

docker compose up -d

docker ps 

docker exec -it container-id cqlsh: I get the error after this command

我尝试拉取各种类型的 Cassandra 图像,但都出现了同样的错误,我检查了几个来源以确定如何使用容器中的气流来安排它,但无济于事

我使用了以下 docker-compose:-

version: '3'

networks:
  app-tier:
    driver: bridge


services:
  spark:
    image: docker.io/bitnami/spark:3.3
    environment:
      - SPARK_MODE=master
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
      - SPARK_USER=spark
    ports:
      - '8080:8080'

    volumes: 
    - ".:/opt/spark"
  spark-worker:
    image: docker.io/bitnami/spark:3.3
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://spark:7077
      - SPARK_WORKER_MEMORY=1G
      - SPARK_WORKER_CORES=1
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
      - SPARK_USER=spark
    networks:
      - app-tier

    
  cassandra:
    image: 'bitnami/cassandra:latest'
    #image: docker.io/bitnami/cassandra:4.1
    #image: cassandra:latest
    ports:
      - '7000:7000'
      - '127.0.0.1:9042:9042'
    volumes:
      #- 'cassandra_data:/bitnami'
      - ".:/opt/cassandra"
    environment:
      - CASSANDRA_SEEDS=cassandra
      - CASSANDRA_PASSWORD_SEEDER=yes
      - CASSANDRA_PASSWORD=cassandra
    networks:
      - app-tier ```


docker pyspark cassandra airflow spark-cassandra-connector
1个回答
0
投票

Docker 容器在自己的网络中运行,因此当您连接到容器时,您需要指定要连接的网络。

在您的情况下,您已将网络命名为

app-tier
,因此在您的命令中使用
--network app-tier
指定网络。

此外,您还需要指定要连接的容器的名称。您可以从

docker ps
输出中找到容器的名称。

如果您有兴趣,Apache Cassandra 官方网站上的Quickstart Guide 有在 Docker 中运行 Cassandra 的详细步骤。

最后,我强烈建议您先花一些时间学习 Docker,以便了解基础知识。否则,您将浪费大量时间处理与 Cassandra 或 Spark 无关的其他简单问题。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.