鲲鹏社区首页
中文
注册
开发者
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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上提交了修复。

结论、解决方案及效果

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