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

Spark Worker抛出java.net.UnknownHostException问题排查求助

问题根源

报错java.net.UnknownHostException: Jake说明Spark Executor无法解析名为Jake的主机地址。这个Jake是你本地宿主机的hostname,当你在Jupyter中启动Spark Session作为Driver时,Driver会把自己的hostname(Jake)告知Executor,但Docker容器所在的网络无法解析这个本地hostname,导致Executor无法连接Driver,进而反复退出重启。

解决方案

1. 显式指定Spark Driver的宿主机IP

在创建Spark Session时,通过spark.driver.host配置项指定你的宿主机局域网IP(比如192.168.x.x),让Executor能直接解析到Driver的地址:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master("spark://spark-master:7077")  # 替换成你的Master容器名或IP
    .appName("TaskTest") \
    .config("spark.driver.host", "192.168.1.105")  # 替换为你的宿主机实际IP
    .getOrCreate()

2. 固定Driver端口并开放防火墙(可选)

如果宿主机有防火墙限制,可以固定Driver的端口,避免随机端口带来的访问问题:

spark = SparkSession.builder \
    .master("spark://spark-master:7077")
    .appName("TaskTest") \
    .config("spark.driver.host", "192.168.1.105")
    .config("spark.driver.port", "57142")  # 用报错里的端口或自定义固定端口
    .getOrCreate()

然后在宿主机防火墙中开放这个固定端口,允许Docker容器访问。

3. 确保网络连通性

  • 如果Jupyter是运行在Docker容器中,要保证它和Spark集群在同一个Docker网络内(docker-compose默认会创建专属网络,只需把Jupyter容器加入该网络即可)。
  • 如果Jupyter在本地运行,确认宿主机IP能被Spark容器正常ping通(进入Spark Worker容器执行ping 宿主机IP测试)。

4. 禁用Driver hostname自动解析(可选)

在Spark的配置文件或docker-compose的环境变量中添加:

# 在Spark Master/Worker的环境变量里添加
environment:
  - SPARK_DRIVER_HOST=192.168.1.105

不过更推荐在创建Spark Session时动态指定,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:45:11