使用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)
- 把Spark连接地址改为
- 解决办法:
- 容器内运行代码:必须确保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
相关产品推荐
相关产品推荐

