一.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 的情况下),但是连接操作超时了。这可能会出现以下一些情况:

  1. 资源问题:网络或硬件资源的不足,使得 Executor 进程无法顺利连接 Shuffle Server。
  2. 网络问题:可能是网络连接不稳定或网络延迟较高导致 Executor 进程连接 Shuffle Server 超时。
  3. 我的问题是:集群压力比较大导致shuffle超时

以下是一些可能的解决方案:

  1. 增加网络带宽:如果要启用外部 Shuffle,可以尝试增加网络带宽,以便 Executor 进程能够更快地连接 Shuffle Server。
  2. 调整网络连接:可以尝试连接更稳定的网络,或者优化网络连接的设置,可能会提高连接 Shuffle Server 的成功率。
  3. 调整资源配置:可以尝试调整 Executor 进程的资源分配,例如增加内存或 CPU 数量,以便更好地处理 Shuffle 数据。
  4. 查看日志信息:可以查看 Executor 进程报错日志,了解更多具体信息,以便定位问题并排除故障。

三.    org.apache.spark.shuffle.FetchFailedException: Failed to connect to

当在 Hive 上使用 Spark 作为执行引擎时,可能会遇到 "org.apache.spark.shuffle.FetchFailedException: Failed to connect to" 的错误。这个错误通常是由于数据节点之间的网络连接问题导致的。

以下是一些可能的原因和解决方法:

  1. 网络问题:确保集群中的各个节点之间的网络连接正常。可以尝试通过 ping 命令测试节点之间的连接性,检查是否存在网络故障或防火墙配置问题。
  2. 资源不足:该错误也可能是由于资源不足导致的。确保集群的计算资源(如内存和 CPU)足够满足作业的需求。可以通过增加集群的规模或优化作业的资源配置来解决此问题。
  3. 节点故障:如果出现节点故障,例如某个节点宕机或无法访问,可能会导致数据无法正确地传输。检查集群中的节点状态,确保所有节点都处于正常运行状态。
  4. 数据倾斜:当数据倾斜发生时,一些节点可能会负载过高,导致无法及时处理任务。这可能会导致连接超时或连接失败的错误。在这种情况下,可以尝试优化数据分布或调整数据倾斜的处理策略。
  5. 参数调整:根据具体情况,可能需要调整 Spark 相关的参数来解决连接问题。例如,可以尝试增加 spark.network.timeout 参数的值,以延长网络连接的超时时间。

    四.org.apache.spark.shuffle.FetchFailedException: Connection from shhdh09plpcdh-pro242.mcd.com.cn/10.126.146.242:7337 closed

这个错误通常与网络问题有关,可能是由于 Spark Executor 无法连接到 Spark Driver 或者从 Spark Executor 获取数据而导致的。

以下是一些可能的解决方法:

  1. 检查网络连接:首先确保网络连接稳定,并且 Spark Driver 和 Executor 之间可以相互访问。您可以尝试使用 ping 命令或其他网络工具检查网络连接是否正常。
  2. 调整相关参数:您可以尝试调整一些相关参数,例如增加 spark.executor.memoryspark.driver.memory 等参数,以提高内存大小和分配给 Spark 的资源数量。此外,还可以尝试调整 spark.shuffle.service.enabled 参数,让 Spark 使用外部 Shuffle 服务来避免 FetchFailedException 错误。
  3. 检查 Spark 日志:您可以查看 Spark Driver 和 Executor 的日志文件,以了解错误的详细信息。日志文件通常位于 $SPARK_HOME/logs 目录下,您可以使用 grep 命令或其他日志工具来搜索和过滤错误信息。
  4. 更新 Spark 版本:如果问题仍然存在,您可以尝试更新 Spark 版本。有时版本之间可能会存在某些 bug 或问题,升级到新版本可以解决问题。

总之,当出现 FetchFailedException 错误时,首先应该检查网络连接是否正常,并尝试调整相关参数和更新 Spark 版本等操作。如果问题仍然存在,请查看 Spark 日志以了解更多详细信息,并根据需要进行进一步的排除和调试。