我在使用 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 文件:
但是当我刚刚在 zeppelin note 中测试运行 %spark.pyspark 时,我收到了此错误:
org.apache.zeppelin.interpreter.InterpreterException: java.io.IOException: 无法检测 scala 版本,原因是:无法运行程序 "/opt/bitnami/spark/bin/spark-submit": error=2,没有这样的文件或目录
我是 Docker 新手,但我的项目需要使用它。您能为这个问题提供一些解决方案吗?非常感谢!
您遇到的问题似乎与无法找到 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 的问题。