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

使用Python连接Docker部署的Spark集群失败求助

排查Spark集群连接UnknownHostException: spark-master问题

1. 先明确Python代码的运行环境

  • 容器外运行代码:Docker Compose创建的spark-master主机名仅在Docker内部网络生效,本地机器DNS无法解析
    • 解决办法:
      • 把Spark连接地址改为spark://<服务器公网/内网IP>:7077,替换代码里的spark://spark-master:7077
      • 或者在本地hosts文件添加映射:服务器IP spark-master(Windows路径:C:\Windows\System32\drivers\etc\hosts;Linux/macOS路径:/etc/hosts)
  • 容器内运行代码:必须确保Python容器和Spark集群在同一个Docker网络中,检查Docker Compose是否配置了自定义网络,并让Python容器加入该网络

2. 检查Docker Compose网络与端口配置

网络配置验证

确认Spark服务是否加入了自定义网络(如果有):

networks:
  spark-net:
    driver: bridge

services:
  spark-master:
    networks:
      - spark-net
  spark-worker:
    networks:
      - spark-net

若存在自定义网络,运行Python容器时需通过--network spark-net参数加入该网络。

端口映射验证

确保spark-master的7077端口已映射到主机:

spark-master:
  ports:
    - "7077:7077"  # 必须存在这个映射,否则外部无法连接
    - "8080:8080"

3. 测试网络连通性

在运行Python代码的机器上执行命令,验证7077端口是否可达:

# 用telnet测试
telnet <服务器IP> 7077
# 或用nc测试
nc -zv <服务器IP> 7077

如果不通,检查服务器防火墙/安全组是否放行7077端口。

4. 确认Spark Master监听地址

进入spark-master容器,检查监听配置:

docker exec -it <spark-master容器名> cat $SPARK_HOME/conf/spark-defaults.conf

确保spark.master配置的监听地址是0.0.0.0(而非仅本地回环127.0.0.1),Bitnami Spark默认已配置正确,但可确认排查。

5. 修正Python代码连接字符串

根据运行环境调整连接地址:

from pyspark.sql import SparkSession

# 容器外运行时用服务器IP
spark = SparkSession.builder \
    .master("spark://<服务器IP>:7077") \
    .appName("TestConnection") \
    .getOrCreate()

# 容器内同网络运行时用容器名
# spark = SparkSession.builder \
#     .master("spark://spark-master:7077") \
#     .appName("TestConnection") \
#     .getOrCreate()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:49:57