You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bitnami docker-compose部署Spark后无法从宿主机创建会话如何解决

问题原因
  1. 宿主机运行PySpark代码的本地环境依赖Java,未安装配置Java环境会直接触发JAVA_HOME is not set报错,容器内部自带Java运行环境所以容器内运行作业正常。
  2. Bitnami Spark镜像默认将Master服务绑定到容器内部hostname,宿主机访问时会出现地址解析失败,就算Java配置正确也会出现网关进程提前退出的报错。
解决方案

步骤1:配置宿主机Java环境

  • 安装Spark 3.x推荐的OpenJDK 11:
sudo apt update && sudo apt install openjdk-11-jdk -y
  • 编辑~/.bashrc文件,在末尾添加环境变量配置:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
  • 生效配置并验证:
source ~/.bashrc
# 正常会输出Java安装路径
echo $JAVA_HOME
# 正常会输出Java版本信息
java -version

步骤2:修改docker-compose.yml配置

给spark服务新增2个环境变量,解决Master地址绑定问题,worker配置保持不变即可:

version: '2'

services:
  spark:
    image: docker.io/bitnami/spark:3
    environment:
      - SPARK_MODE=master
      - SPARK_MASTER_HOST=0.0.0.0
      - SPARK_MASTER_ADDRESS=localhost
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
    ports:
      - '8080:8080'
      - '7077:7077'
  spark-worker-1:
    image: docker.io/bitnami/spark: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-worker-2:
    image: docker.io/bitnami/spark: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

步骤3:重启集群并修改客户端代码

  • 重启Spark集群使配置生效:
docker-compose down && docker-compose up -d
  • 访问http://localhost:8080确认Spark Master正常运行,页面显示的Master地址为spark://localhost:7077
  • 修改PySpark连接代码,指定Driver地址(Docker默认宿主机网关为172.17.0.1,可通过ip addr show docker0命令确认实际地址):
from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .master("spark://localhost:7077") \
    .appName("test") \
    .config("spark.driver.host", "172.17.0.1") \
    .getOrCreate()
# 测试运行
df = spark.range(100)
df.show()

内容的提问来源于stack exchange,提问作者lc14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:24:03