---
title: Spark 3.1.1版本运行10T大数据集时，偶发OneForOneBlockFetcher相关错误的解决方法
description: "在Spark 3.1.1中处理10TB大数据集时，若“spark.network.timeout”设置过小，可能会导致Shuffle阶段在fetch数据时超时，从而触发与“OneForOneBlockFetcher”相关的错误，并可能导致最终数据结果不一致。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0235.html
sourcePath: /source/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0235.html
indexId: 8657f05d018db5b27522b90a1421e8f7efd2cb379c4806b6ff90bdd03af989f578
---
# Spark 3.1.1版本运行10T大数据集时，偶发OneForOneBlockFetcher相关错误的解决方法

#### 问题现象描述

在Spark 3.1.1中处理10TB大数据集时，若“spark.network.timeout”设置过小，可能会导致Shuffle阶段在fetch数据时超时，从而触发与“OneForOneBlockFetcher”相关的错误，并可能导致最终数据结果不一致。


#### 关键过程、根本原因分析

在10TB规模的数据集下，Spark默认的“spark.network.timeout”`设置为120秒。在Shuffle阶段，当数据fetch出现异常（如超时）时，Spark会尝试重新Fetch数据。然而，由于Block ID错乱，可能导致重新fetch的数据内容也错乱，从而引发概率性的数据不一致问题。该问题已被确认为Spark社区代码中的Bug，并已在GitHub(https://github.com/apache/spark/pull/31643)上提交了修复。


#### 结论、解决方案及效果

考虑将spark.network.timeout调大，避免fetch数据超时。推荐设为600，可解决本例中问题。
