使用Docker部署Bitnami Spark与Zeppelin时SPARK_HOME配置错误求助
问题分析
核心问题有两点:
- Zeppelin容器内未部署Bitnami Spark,你配置的
SPARK_HOME=/opt/bitnami/spark是Spark容器内的路径,Zeppelin容器中不存在该目录,因此找不到spark-submit; - 你在Spark容器中看到的
spark-submit.cmd是Windows平台脚本,而Zeppelin容器是Linux环境,实际需要的是无后缀的spark-submit可执行文件(Bitnami Spark的Linux镜像bin目录中默认包含该文件)。
解决方案
推荐使用Bitnami官方Zeppelin镜像,它原生适配Bitnami Spark集群,无需手动处理路径、权限等兼容问题。
修改docker-compose.yml配置
替换原有Zeppelin服务配置,同时简化Spark节点的启动命令(符合Bitnami镜像标准用法):
version: "3.7" services: spark-master: image: bitnami/spark:latest container_name: spark-master environment: - SPARK_MODE=master - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no depends_on: - kafka ports: - "8080:8080" - "7077:7077" spark-worker-1: image: bitnami/spark:latest container_name: spark-worker-1 depends_on: - spark-master environment: - SPARK_MODE=worker - SPARK_WORKER_CORES=2 - SPARK_WORKER_MEMORY=2g - SPARK_MASTER_URL=spark://spark-master:7077 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no spark-worker-2: image: bitnami/spark:latest container_name: spark-worker-2 depends_on: - spark-master environment: - SPARK_MODE=worker - SPARK_WORKER_CORES=2 - SPARK_WORKER_MEMORY=2g - SPARK_MASTER_URL=spark://spark-master:7077 - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no 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: bitnami/zeppelin:latest container_name: zeppelin depends_on: - spark-master ports: - "8082:8080" environment: - SPARK_MASTER_URL=spark://spark-master:7077 - ZEPPELIN_PORT=8080
操作步骤
- 停止并删除现有容器:
docker-compose down
- 重新启动服务:
docker-compose up -d
- 等待所有容器启动完成后,访问
http://localhost:8082打开Zeppelin界面,创建新笔记并运行%spark.pyspark测试。
可选方案(不推荐)
若坚持使用apache/zeppelin镜像,需将Spark容器的Spark目录挂载到Zeppelin容器,并处理权限问题:
- 在spark-master服务中添加卷:
volumes: - spark-shared:/opt/bitnami/spark - 在zeppelin服务中添加卷:
volumes: - spark-shared:/opt/bitnami/spark,同时添加环境变量- SPARK_USER=root
该方式易出现权限冲突、版本兼容等问题,不如Bitnami官方镜像省心。
内容的提问来源于stack exchange,提问作者Baubau Tran
相关产品推荐
相关产品推荐

