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

Spark Worker接收任务但未执行问题求助(Docker Compose集群)

Spark集群任务停滞问题排查与解决

核心问题

从Worker日志里的--driver-url字段能看到,Driver的地址是spark://CoarseGrainedScheduler@example.net:55497——这里的example.net是你主机的默认hostname,但Docker容器内部没法解析这个名称,导致Worker启动的Executor连不上主机上的Spark Driver(也就是你Jupyter里的SparkSession),任务自然卡着不动。

解决办法

1. 在SparkSession里显式指定Driver地址

创建SparkSession时,加上spark.driver.host配置,用Docker能访问的主机地址,比如Docker Desktop环境下用host.docker.internal,或者直接填你的主机真实IP:

import pyspark
spark = pyspark.sql.SparkSession.builder \
    .master("spark://localhost:7077") \
    .config("spark.driver.host", "host.docker.internal")  # 替换成你的主机IP也可以
    .getOrCreate()
spark.range(1000 * 1000 * 1000).count()

2. 修改Docker Compose配置,添加主机映射

在Worker服务里加extra_hosts,把主机的hostname映射到真实IP,让容器能解析:

version: "3"
services:
  spark-master:
    image: spark:3.5.0
    entrypoint: /opt/spark/bin/spark-class org.apache.spark.deploy.master.Master
    ports:
      - 8080:8080
      - 7077:7077
   
  spark-worker:
    image: spark:3.5.0
    depends_on:
      - spark-master
    entrypoint: /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077
    extra_hosts:
      - "example.net:192.168.1.100"  # 替换成你的主机实际IP

3. (可选)修改主机hostname(仅Docker Desktop适用)

把主机hostname改成host.docker.internal,不过这种方式灵活性差,不如前两种实用。

验证

改完后重启Docker集群,重新运行Notebook代码,看Worker日志里的--driver-url是不是变成了容器能访问的地址,同时检查WebUI里的任务是否开始执行。

内容的提问来源于stack exchange,提问作者jan-seins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:15:58