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

为何无法在Bitnami-Spark容器中运行Spark作业?

问题排查方向

针对你遇到的Spark提交脚本报错(初始运行正常,后续出现All masters are unresponsive和Cannot call methods on a stopped SparkContext),结合你的配置给出以下排查点:

1. 修正Spark Master地址与网络连通性

  • 避免使用硬编码IP(如172.18.0.2),改用Docker Compose服务名spark-master作为Master地址,因为容器重启后IP可能变化:
    docker-compose exec spark-master spark-submit --master spark://spark-master:7077 mounted-data/etl_script.py
    
  • 检查Spark Master服务是否正常运行:
    docker-compose exec spark-master ps aux | grep spark
    
  • 验证容器内部7077端口连通性:
    docker-compose exec spark-master telnet spark-master 7077
    

2. 修复Dockerfile中的环境变量配置

当前Dockerfile用RUN export设置的变量仅在构建阶段生效,运行时无法读取。改为ENV持久化环境变量:

FROM --platform=linux/amd64 bitnami/spark:3.3.1

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt && rm requirements.txt

# 改用ENV设置运行时生效的变量
ENV PACKAGES="io.delta:delta-core_2.12:2.2.0"
ENV PYSPARK_SUBMIT_ARGS="--packages ${PACKAGES} pyspark-shell"

注:Spark 3.3.1兼容Delta Lake 2.2.0,而非1.0.0,建议同步升级版本

3. 排查资源耗尽问题

  • 查看容器日志是否有OOM(内存不足)报错:
    docker-compose logs spark-master | grep -i "out of memory"
    
  • 在docker-compose中添加资源限制,防止容器耗尽宿主机内存:
    services:
      spark-master:
        ...
        deploy:
          resources:
            limits:
              memory: 2G
            reservations:
              memory: 1G
    

4. 检查Delta Lake配置兼容性

  • 你的脚本使用configure_spark_with_delta_pip,可能会安装与Spark版本不兼容的Delta包。建议在脚本中指定兼容版本:
    spark = configure_spark_with_delta_pip(builder, extra_packages=["io.delta:delta-core_2.12:2.2.0"]).getOrCreate()
    
  • 或者直接在spark-submit命令中指定依赖,绕过环境变量的问题:
    spark-submit --packages io.delta:delta-core_2.12:2.2.0 --master spark://spark-master:7077 mounted-data/etl_script.py
    

5. 验证Spark Context生命周期管理

  • 报错提示调用已停止的SparkContext,可能是前一次运行残留的上下文未清理。在脚本末尾显式停止上下文:
    # 脚本执行完毕后添加
    spark.stop()
    
  • 检查是否有其他进程占用Spark相关端口,导致Master无法正常响应。

6. 对比jupyter/pyspark-notebook镜像差异

  • jupyter镜像默认可能使用local模式运行Spark,而你的Bitnami镜像使用standalone模式。检查两者的Spark配置差异:
    # 在Bitnami容器中查看配置
    docker-compose exec spark-master cat $SPARK_HOME/conf/spark-defaults.conf
    
  • 确认Bitnami镜像的Spark Master是否开启了正确的监听地址,确保容器内部和外部都能访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:02:06