You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker部署Spark集群Java Driver提交任务端口绑定失败求助

解决Spark Driver端口绑定失败问题

看起来你的核心问题是Spark Driver无法正确绑定到指定地址/端口,导致Worker节点无法与Driver建立连接。结合你的配置和环境,我整理了几个关键修复步骤:

1. 修正Driver的地址配置(最关键)

你的spark.driver.hostspark.driver.bindAddress配置存在明显冲突:

  • spark.driver.host应该设置为你的Windows 10本地PC的局域网IP地址(比如192.168.1.105这类),因为Spark Worker节点需要主动发起连接到Driver,必须用Worker能访问到的外部IP,而不是Docker内部的172.18.0.2(这个是容器内部IP,Worker集群无法直接访问)。
  • spark.driver.bindAddress应该设置为0.0.0.0或者Windows本地的回环地址127.0.0.1,因为Driver是在你的IntelliJ(Windows本地)运行的,不是Docker容器里,不需要绑定到Docker的内部IP。

2. 调整端口配置

  • 不要硬指定spark.driver.port32772,除非你100%确认这个端口在Windows上完全空闲,并且已经在Windows防火墙里开放了入站规则。建议先注释掉这个配置,让Spark自动随机分配可用端口;如果一定要指定端口,选一个你确认未被占用的端口,同时在Windows防火墙里添加允许该端口入站的规则。

3. 验证网络连通性

  • 确保Ubuntu服务器(Spark集群所在机器)能ping通你的Windows本地IP,如果ping不通,说明网络存在隔离,需要先解决这个问题(比如检查路由器设置、防火墙规则)。
  • 可以临时关闭Windows防火墙测试,确认是不是防火墙阻止了Worker到Driver的连接,测试通过后再添加针对性的规则。

修正后的示例代码

SparkSession spark = SparkSession.builder()
 .master("spark://nodemaster:7077")
 .appName("MongoSparkConnectorIntro")
 .config("spark.network.timeout", "2000000")
 // 注释掉硬指定的端口,让Spark自动分配可用端口
 // .config("spark.driver.port", "32772")
 .config("spark.driver.host", "192.168.1.100") // 替换成你的Windows本地局域网IP
 .config("spark.driver.bindAddress", "0.0.0.0")
 .config("spark.mongodb.input.uri", "mongodb://")
 .config("spark.mongodb.output.uri", "mongodb://")
 .getOrCreate();

额外检查点

  • 确认Windows本地的hosts文件也添加了nodemaster到Ubuntu服务器IP的映射,这样Driver能正确找到Spark Master。
  • 检查Docker Compose的Spark集群网络配置:如果用的是默认bridge网络,Worker可能无法访问外部Windows IP,可以考虑将Spark容器的网络模式设置为host,或者自定义网络并确保端口转发正确。

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

火山引擎 最新活动