一.org.apache.spark.shuffle.FetchFailedException: Connection from /xxx:7337 closed
背景:shuffle过程包括shuffle read和shuffle write两个过程。对于spark on yarn,shuffle write是container写数据到本地磁盘(路径由core-site.xml中hadoop.tmp.dir指定)过程;
shuffle read是container请求external shuffle服务获取数据过程,external shuffle是NodeManager进程中的一个服务,默认端口是7337,或者通过spark.shuffle.service.port指定。
定位过程:拉取任务运行日志,查看container日志;查看对应ip上NodeManager进程运行日志,路径由yarn-env.sh中YARN_LOG_DIR指定
原因:container已经连接上NodeManager上external shufflle服务,原因可能是
(1)external shuffle服务正常,但在规定时间内将数据返回给container,可能是中间数据量大且文件数多,external shuffle服务搜索数据过程久,最终导致containter误认为connection dead,因此抛出xxx:7337 closed了异常
(2)NameNode进程不正常
解决方案:针对原因(1),调大spark.network.timeout值,如1800s,此参数可以在spark-defaults.conf设置,对所有任务都生效;也可以单个任务设置
针对原因(2),参考org.apache.spark.shuffle.FetchFailedException: Failed to connect to /9.4.36.40:7337的解决方案
二.org.apache.spark.shuffle.FetchFailedException: Connection reset by peer
这个问题发生在 Spark 作业在运行过程中,Executor 进程尝试连接外部的 Shuffle Server(例如,启用了外部 Shuffle 的情况下),但是连接操作超时了。这可能会出现以下一些情况:
- 资源问题:网络或硬件资源的不足,使得 Executor 进程无法顺利连接 Shuffle Server。
- 网络问题:可能是网络连接不稳定或网络延迟较高导致 Executor 进程连接 Shuffle Server 超时。
- 我的问题是:集群压力比较大导致shuffle超时
以下是一些可能的解决方案:
- 增加网络带宽:如果要启用外部 Shuffle,可以尝试增加网络带宽,以便 Executor 进程能够更快地连接 Shuffle Server。
- 调整网络连接:可以尝试连接更稳定的网络,或者优化网络连接的设置,可能会提高连接 Shuffle Server 的成功率。
- 调整资源配置:可以尝试调整 Executor 进程的资源分配,例如增加内存或 CPU 数量,以便更好地处理 Shuffle 数据。
- 查看日志信息:可以查看 Executor 进程报错日志,了解更多具体信息,以便定位问题并排除故障。
版权归原作者 HikZ.919 所有, 如有侵权,请联系我们删除。