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

运行Spark作业时出现java.net.SocketException异常的原因及解决方法

Spark作业java.net.SocketException异常原因及解决方案

异常产生原因

  • 集群网络层故障:Spark Driver与Executor、Executor之间的TCP连接被意外中断,常见触发场景包括节点宕机、防火墙规则拦截通信端口、网络波动导致连接重置。
  • RPC消息超限:你当前配置的spark.rpc.message.maxSize为1024MB,若作业运行过程中需要传输的序列化任务结果、批量数据、shuffle块大小超过该阈值,会触发RPC连接强制断开,抛出Socket异常。
  • 进程异常终止:Driver或Executor的内存、CPU资源耗尽,被集群资源管理器(YARN/K8s等)强制kill,另一端发送网络请求时无法收到响应,触发该异常。
  • 空闲连接被回收:集群网络设备(交换机、负载均衡)或Spark自身的空闲连接超时阈值设置过短,长时间无数据传输的连接被主动回收,后续请求复用旧连接时抛出异常。
  • Shuffle阶段故障:Shuffle过程中上游Executor意外退出,下游Executor拉取shuffle数据时无法建立连接,也会抛出该异常。

解决方案

  • 调整RPC消息容量:如果排查确认是大消息导致的异常,可适当调大spark.rpc.message.maxSize参数,比如调整为2048(单位为MB),注意不要超过节点内存承载上限。
  • 排查网络连通性:
    • 确认集群所有节点之间Spark所需通信端口(默认7077、8080、8081、4040以及Executor随机通信端口范围)未被防火墙拦截。
    • 检测节点间的网络延迟、丢包率,排除基础网络故障。
  • 优化资源配置:
    • 适当调大Driver、Executor的内存分配,避免OOM导致进程被终止。
    • 合理设置Executor核数,避免单节点CPU负载过高导致进程无响应。
  • 调整超时参数:增加spark.network.timeout配置,默认值为120s,可根据作业场景调整为300s甚至更长;同时将spark.executor.heartbeatInterval调整为spark.network.timeout的1/3以下,避免心跳超时导致Executor被标记为失效。
  • 优化作业逻辑:
    • 对大体积DataFrame/RDD做repartition/coalesce拆分数据块,避免单块数据过大导致RPC传输超限。
    • 避免在Driver端调用collect()等操作全量拉取大表数据,减少Driver与Executor之间的超大消息传输。
  • 配置失败重试:将spark.task.maxFailures设置为4及以上,允许单次任务失败后自动重试,避免偶发网络波动导致整个作业失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:06:02