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

Docker部署Spark集群提交作业报初始作业未接收资源错误如何解决

解决方案

问题根因

Spark提交作业时,驱动会自动探测本地IP生成对外广播的CoarseGrainedScheduler地址,你的WSL2默认运行在NAT网络模式下,自动探测到的172.25.230.63是Windows宿主机内部虚拟网段IP,仅Windows本地可访问,Linux桌面的Docker集群Worker节点无法连通该地址。直接指定Windows局域网IP时,WSL2实例未直接绑定该IP,因此Spark进程无法完成监听绑定。


方案1:端口映射+显式配置驱动参数(无需改动现有网络架构,最推荐)

操作步骤:

  • 提交作业时显式指定驱动对外地址和固定端口,示例提交命令:
spark-submit \
--master spark://<你的Spark Master节点对外IP>:7077 \
--conf spark.driver.host=<Windows主机的局域网IP> \
--conf spark.driver.port=30000 \
你的作业包.jar
  • 在Windows宿主机以管理员身份运行CMD/PowerShell,执行端口转发规则,将Windows局域网IP的30000端口流量转发到WSL2实例的对应端口:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=30000 connectaddress=172.25.230.63 connectport=30000
  • 放开Windows防火墙30000端口的入站规则,或临时关闭防火墙验证连通性。
  • 验证:随便找一台Worker节点执行telnet <Windows局域网IP> 30000,确认连通正常后再提交作业即可。

方案2:WSL2切换桥接网络模式(一劳永逸)

直接让WSL2实例获取和Windows宿主机同网段的局域网IP,无需端口转发:

  • 打开Windows的Hyper-V管理器,新建一个外部虚拟交换机,绑定你当前接入局域网的物理网卡。
  • 在Windows用户目录下新建/编辑.wslconfig文件,添加以下配置:
[wsl2]
networkingMode=bridged
vmSwitch=<你刚才新建的虚拟交换机名称>
  • 执行wsl --shutdown重启WSL2,重启后WSL2会直接从局域网路由器获取IP,此时你提交作业时直接指定spark.driver.host为WSL2的新局域网IP即可,不需要额外端口转发。

方案3:驱动放入Docker容器运行

将提交作业的驱动进程放在和Spark集群同Docker网络的容器内运行,驱动IP自动为Docker内网可路由地址,所有Worker可直接连通,不需要处理跨网络问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:03