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

Docker部署Spark独立集群Executor频繁退出问题求助

解决Docker Spark独立集群中Executor无法连接Driver的问题

问题核心

Docker容器内的Spark Executor无法访问外部运行的Python Driver,因为Driver默认绑定本地/Docker网桥IP(如172.17.0.2),容器内的Executor无法通过该IP建立连接,导致Executor启动后超时退出,进而触发Initial job has not accepted any resources警告。

解决方案

1. 显式配置Driver的可访问地址

在SparkSession构建时添加两个关键配置,强制Driver暴露给Executor可访问的外部IP和固定端口:

from pyspark.sql import SparkSession

if __name__ == '__main__':
    spark = SparkSession.builder.appName('test') \
        .master('spark://192.168.1.169:7077') \
        .config("spark.executor.memory", "512m") \
        .config('spark.cores.max', '1') \
        .config("spark.executor.cores", "1") \
        .config("spark.executor.instances", "1") \
        # 指定Driver所在机器的外部可访问IP
        .config("spark.driver.host", "192.168.1.169") \
        # 指定固定端口,避免随机端口导致的网络拦截
        .config("spark.driver.port", "54321") \
        .getOrCreate()

    data = [("A", 1), ("B", 2), ("C", 3)]
    columns = ["Letter", "Number"]
    df = spark.createDataFrame(data, columns)
    df.show()

    spark.stop()

2. 验证网络连通性

  • 检查Driver所在机器的防火墙,确保开放了指定的spark.driver.port(如示例中的54321)
  • 在Spark Worker容器内执行ping 192.168.1.169,确认能正常连通Driver所在机器

3. 调整Docker网络模式(可选)

如果默认桥接网络存在连通性问题,可将Spark容器切换为host网络模式:

  • 启动Master容器时添加参数:docker run --network host ...
  • 启动Worker容器时添加参数:docker run --network host ...
  • 此模式下容器直接使用宿主机网络栈,Executor可直接访问Driver的宿主机IP,无需额外端口配置

验证

修改配置后重新运行测试代码,若Executor日志不再出现连接超时错误,且df.show()正常输出结果,说明问题已解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:00:21