Docker 上的 bitnami/spark 和 zeppelin 的 SPARK_HOME 配置错误

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

我在使用 Docker 和 Zeppelin 实现 Spark 时遇到问题,需要一些解决方案

我的 docker-compose.yml:

version: "3.7"

services:
  spark-master:
    image: bitnami/spark:latest
    container_name: spark-master
    command: bin/spark-class org.apache.spark.deploy.master.Master
    depends_on:
      - kafka
    ports:
      - "8080:8080"
      - "7077:7077"

  spark-worker-1:
    image: bitnami/spark:latest
    container_name: spark-worker-1
    command: bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077
    depends_on:
      - spark-master
    environment:
      SPARK_MODE: worker
      SPARK_WORKER_CORES: 2
      SPARK_WORKER_MEMORY: 2g
      SPARK_MASTER_URL: spark://spark-master:7077

  spark-worker-2:
    image: bitnami/spark:latest
    container_name: spark-worker-2
    command: bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077
    depends_on:
      - spark-master
    environment:
      SPARK_MODE: worker
      SPARK_WORKER_CORES: 2
      SPARK_WORKER_MEMORY: 2g
      SPARK_MASTER_URL: spark://spark-master:7077

  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    ports:
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

  cassandra:
    image: cassandra:3.11.3
    container_name: cassandra
    ports:
      - 9042:9042

  zeppelin:
    image: apache/zeppelin:0.10.1
    container_name: zeppelin
    depends_on:
      - spark-master
    ports:
      - "8082:8080"
    environment:
      - "SPARK_HOME=/opt/bitnami/spark"
      - "SPARK_MASTER=spark://spark-master:7077"

我已经使用命令检查了 SPARK_HOME 中的 Spark-submit 文件:

  • C:\Users\ACER>docker exec -it 0d671530e12c /bin/bash
  • 我没有名字!@0d671530e12c:/opt/bitnami/spark$ cd bin/
  • 我没有名字!@0d671530e12c:/opt/bitnami/spark/bin$ ls -la -> 并且有spark-submit.cmd 文件

但是当我刚刚在 zeppelin note 中测试运行 %spark.pyspark 时,我收到了此错误:

org.apache.zeppelin.interpreter.InterpreterException: java.io.IOException: 无法检测 scala 版本,原因是:无法运行程序 "/opt/bitnami/spark/bin/spark-submit": error=2,没有这样的文件或目录

我是 Docker 新手,但我的项目需要使用它。您能为这个问题提供一些解决方案吗?非常感谢!

docker apache-spark docker-compose dockerfile apache-zeppelin
1个回答
0
投票

您遇到的问题似乎与无法找到 spark-submit 可执行文件有关。 Spark 二进制文件(包括 spark-submit) 可能在 Zeppelin Docker 映像中不可用。

这是解决此问题的潜在解决方案:

调整 Spark 图像:

更新 docker-compose.yml 文件中的 Zeppelin 服务以使用包含 Spark 和 Zeppelin 的自定义 Docker 映像。您可以创建一个 Dockerfile 来构建包含 Spark 和 Zeppelin 的自定义映像。

创建一个名为 Dockerfile.zeppelin 的文件,其中包含以下内容:

FROM bitnami/spark:latest

ENV ZEPPELIN_VERSION 0.10.1

# Download and install Zeppelin
RUN mkdir /opt/zeppelin && \
   curl -SL https://downloads.apache.org/zeppelin/zeppelin-${ZEPPELIN_VERSION}/zeppelin-${ZEPPELIN_VERSION}-bin-all.tgz | \
   tar -xzC /opt/zeppelin --strip-components=1
ENV ZEPPELIN_HOME /opt/zeppelin
WORKDIR $ZEPPELIN_HOME
CMD ["bin/zeppelin.sh"]

更新docker-compose.yml:

修改您的 docker-compose.yml 文件以使用自定义 Zeppelin 映像:

 zeppelin:
    build:
      context: .
      dockerfile: Dockerfile.zeppelin
    container_name: zeppelin
    depends_on:
     - spark-master
   ports:
     - "8082:8080"
   environment:
     - "SPARK_HOME=/opt/bitnami/spark"
     - "SPARK_MASTER=spark://spark-master:7077"

构建并运行: 构建 Docker 映像并重新启动容器:

docker-compose build
docker-compose up -d

这将基于 bitnami/spark 映像构建自定义 Zeppelin 映像,并包含必要的 Spark 二进制文件。

测试: 重新启动容器后,尝试在 Zeppelin 笔记本中运行 %spark.pyspark 以查看问题是否得到解决。

通过执行以下步骤,您可以确保 Spark 和 Zeppelin 在同一个 Docker 镜像中都可用,从而解决缺少 spark-submit 的问题。

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