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

如何从宿主机连接到Spark容器并创建SparkSession?

问题解决:宿主机Jupyter连接Docker Spark集群报LiveListenerBus is stopped错误

问题描述

已部署在7077端口运行Spark集群的Docker容器,通过docker inspect获取了容器IP,尝试在宿主机Jupyter中创建SparkSession连接集群,无论使用容器IP还是容器名spark-master指定master地址,均报错:

An error occurred while calling o24.conf.
: java.lang.IllegalStateException: LiveListenerBus is stopped.

解决步骤

1. 确认Spark Master容器正常运行

  • 进入容器检查Spark状态:
docker exec -it <spark-master容器ID/名称> bash
spark-submit --version
  • 访问Spark Master Web UI(默认8080端口),确认集群状态为ALIVE:
    若容器映射了8080端口,宿主机访问http://<容器IP>:8080;未映射则进入容器后访问http://localhost:8080。

2. 验证宿主机与容器的网络连通性

  • 测试容器7077端口是否可达:
# 用容器IP测试
nc -zv <容器IP> 7077
# 用容器名测试的话,需确保宿主机能解析该名称(可在/etc/hosts添加映射,或使用Docker自定义网络)
nc -zv spark-master 7077
  • 若端口不通:检查Docker网络模式,bridge模式需确保7077端口已映射到宿主机;host模式需确认宿主机7077端口未被占用。

3. 补充SparkSession关键配置

Spark Master需要能回调宿主机的driver,因此必须指定driver的可访问地址:

from pyspark.sql import SparkSession

spark = (
    SparkSession
    .builder
    .appName("DockerSparkConnector")
    .master("spark://<容器IP>:7077")
    .config("spark.driver.host", "<宿主机可被容器访问的IP>")  # 核心配置,必填
    .config("spark.driver.port", "4040")  # 可选,指定固定driver端口,需确保该端口开放
    .getOrCreate()
)

注:宿主机IP需是容器能路由到的地址(如同一局域网IP,而非localhost)

4. 检查Spark版本兼容性

宿主机Jupyter中的pyspark版本必须与容器内Spark版本完全一致:

  • 宿主机查看版本:
spark-submit --version
  • 容器内查看版本:
docker exec <spark-master容器ID/名称> spark-submit --version

版本不匹配时,需统一两者版本(如在Jupyter环境安装对应版本的pyspark)。

5. 查看Spark Master容器日志排查异常

通过容器日志定位是否有启动或运行异常:

docker logs <spark-master容器ID/名称>

若日志中出现端口占用、配置错误等信息,针对性修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:32:33