首页 > 其他分享 >org.apache.spark.shuffle.FetchFailedException: The relative remote executor(Id: 21), which maintains

org.apache.spark.shuffle.FetchFailedException: The relative remote executor(Id: 21), which maintains

时间:2023-07-05 09:44:28浏览次数:55  
标签:shuffle 21 scala Executor executor apache org spark fetch

问题描述

org.apache.spark.shuffle.FetchFailedException: The relative remote executor(Id: 21), which maintains the block data to fetch is dead.
最近在做Spark的性能优化,测试使用不同CPU核数和内存对计算性能的影响,由于是在测试集群进行测试的,硬件配置比生产上面的要少和低,遇到了不少的问题,其中一个值得说一下的就是org.apache.spark.shuffle.FetchFailedException:Failed to connect to /xxx:43301

一、运行环境

1.1 硬件

3台测试服务器,分别为A,B,C,每台4核,16GB内存
每台部署HDFS的DataNode和Spark的Worker
其中A同时部署了HDFS的NameNode
其中B同时部署了Spark的Master
其中C是Spark的Driver

1.2 软件

HDFS 2.7.3,集群
Spark 2.1.0,标准集群模式
Java 1.8.0_131

二、Spark启动参数

2.1 测试1

2.1.1 测试参数

spark.driver.cores 没有配置,默认使用1
spark.driver.maxResultSize 配置2g,默认是1g
spark.driver.memory 配置3g,默认是1g
spark.executor.memory 配置8g,默认是1g
spark.executor.cores 没有配置,默认使用Worker全部核数,这里是4

2.1.2 测试结果

Spark集群每个Worker创建了1个Executor,每个Executor使用了4核和8g内存,可以得出结果,耗时2小时

2.2 测试2

2.2.1 测试参数

spark.driver.cores 没有配置,默认使用1
spark.driver.maxResultSize 配置2g,默认是1g
spark.driver.memory 配置3g,默认是1g

因为想每个Worker创建多于1个Executor,测试多个Executors是否能提高性能,所以修改以下参数:

spark.executor.memory 配置4g,是测试1的一半
spark.executor.cores 配置2,是测试1的一半

2.2.2 测试结果

Spark集群每个Worker创建了2个Executors(spark.cores.max/spark.executor.cores=4/2=2),每个Executor使用了2核和4g内存,总使用资源和测试1是一样的,也就是每台服务器的2个Executors总共使用了4核和8g内存,但是遇到以下异常:

[WARN][TaskSetManager] Lost task 6.0 in stage 4.0 (TID 307, xxx, executor 0): FetchFailed(BlockManagerId(1, xxx, 33557, None), shuffleId=0, mapId=7, reduceId=6, message=
org.apache.spark.shuffle.FetchFailedException: Failed to connect to /xxx:43301
	at org.apache.spark.storage.ShuffleBlockFetcherIterator.throwFetchFailedException(ShuffleBlockFetcherIterator.scala:357)
	at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:332)
	at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:54)
	at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
	at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)
	at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
	at org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:32)
	at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:39)
	at org.apache.spark.util.collection.ExternalAppendOnlyMap.insertAll(ExternalAppendOnlyMap.scala:154)
	at org.apache.spark.Aggregator.combineCombinersByKey(Aggregator.scala:50)
	at org.apache.spark.shuffle.BlockStoreShuffleReader.read(BlockStoreShuffleReader.scala:85)
	at org.apache.spark.rdd.ShuffledRDD.compute(ShuffledRDD.scala:109)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
	at org.apache.spark.scheduler.Task.run(Task.scala:99)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)

三、异常分析

因为Executor可用的资源减少了一半,shuffle执行的时间变长,内存使用过多导致无响应心跳,超过默认的spark.network.timeout=120s,对应的Executor会被移除,任务丢失:

[WARN][HeartbeatReceiver] Removing executor 5 with no recent heartbeats: 120504 ms exceeds timeout 120000 ms
[ERROR][TaskSchedulerImpl] Lost executor 5 on xxx: Executor heartbeat timed out after 120504 ms
[WARN][TaskSetManager] Lost task 8.0 in stage 4.0 (TID 309, xxx, executor 5): ExecutorLostFailure (executor 5 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 122504 ms

Spark的DAGScheduler会尝试提交失败的task到其它的Executors,但是由于其它的Executors也是使用同样的配置资源,最终的任务还是会失败。

四、解决方案

减少使用触发shuffle的操作,例如reduceByKey,从而减少使用内存
增大spark.network.timeout,从而允许有更多时间去等待心跳响应
增加spark.executor.cores,从而减少创建的Executor数量,使得总使用内存减少
同时增大spark.executor.memory,保证每个Executor有足够的可用内存
增大spark.shuffle.memoryFraction,默认为0.2(需要spark.memory.useLegacyMode配置为true,适用于1.5或更旧版本,已经deprecated)

另外可以参考官方的shuffle配置参数:http://spark.apache.org/docs/latest/configuration.html#shuffle-behavior

标签:shuffle,21,scala,Executor,executor,apache,org,spark,fetch
From: https://www.cnblogs.com/botaoli/p/17527685.html

相关文章

  • Could not fetch URL https://pypi.org/simple/keras-bert/: There was a problem co
    pip下载包的时候报错CouldnotfetchURLhttps://pypi.org/simple/keras-bert/:Therewasaproblemconfirmingthesslcertificate:HTTPSConnectionPool(host='pypi.org',port=443):Maxretriesexceededwithurl:/simple/keras-bert/(CausedbySSLError(SSLEO......
  • sql server 2008 ,存储过程[IS2120@BG57IV3]
    USE[master];GOSELECT*FROMsys.all_objectsWHERE([type]='P'OR[type]='X'OR[type]='PC')ORDERBY[name];Objecttype:AF=Aggregatefunction(CLR)C=CHECKconstraintD=DEFAULT(constraintorstand-alone)......
  • 2012年中国县级市面积排行(截止到2012年7月31日) (zz.IS2120@BG57IV3)
    2012年中国县级市面积排行(截止到2012年7月31日)//z2013-02-1813:12:[email protected][T146,L2083,R63,V2084]说明:1、以下数据由宜居城市研究室统计整理,统计时间截止到2012年7月31日,与县级市同级的县、旗等不计算入内;2、以下面积均指陆地面积,不包括海域面积,入榜县......
  • 在ubuntu22.04上为无线网卡RTL8821CU安装驱动
    因为工作需要,我要在ubuntu22.04系统上使用无线网卡,网卡芯片是RTL8821CU,网卡驱动要自己编译安装。我最初在github找到了以下驱动代码https://github.com/brektrou/rtl8821CU结果编译出错。循着出错信息,我在github论坛上发现有人推荐了一个新版本的驱动代码,即https://github.co......
  • 【CF1621G】Weighted Increasing Subsequences 题解(优化树状数组)
    CF传送门|LG传送门。优化树状数组+反向处理。Solution发现直接做不好下手。难点主要在求出所有的上升子序列并计算它们分别的贡献。所以需要反向考虑每个单点在什么情况下产生贡献。一个单点会产生多少贡献。一个单点产生贡献的条件很容易得到。一个是在一个上升子序......
  • 天合光能产品怎么样?新一代光储电站系统以及210至尊系列“黄金尺寸”组件闪耀欧洲
     6月16日,德国Intersolar展会圆满落幕。天合光能携新一代光储电站系统解决方案以及领先的至尊N型700W超高功率组件首度亮相欧洲市场。此外,包括中版型605W及小版型450W在内的210“黄金尺寸”全系列N型组件,以及新一代N型i-TOPcon先进技术吸引了大量专业参观者深度交流。 01“黄......
  • 7月摸鱼计划全新升级啦!任选7/14/21天发博文吧~
    下半年,我们的摸鱼计划系列活动,全新升级啦~不需要留言报名!不需要等待统一领奖时间!7月摸鱼计划,将以【博主任务】形式,让大家自发选择更文任务!任务达标后即刻兑奖!且任务间的奖品可同享!【活动时间】发文时间:2023年7月1日—2023年7月31日【活动任务】以下任务福利可同享!!任务一:7天更文任务......
  • UVA210 双端队列模拟并行程序
    #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<vector>#include<queue>#include<cstring>usingnamespacestd;constintmaxn=10001;//uva210:题意模拟n个程序的并行执行,有赋值,打印,lock,unlock,......
  • 21-数码管静态显示
    1.数码管静态显示数码管是一种半导体发光器件,其基本单元是发光二极管常见的数码管有七段数码管和八段数码管(相差一个小数点),还有米字管,十六段管等八段发光数码管每一段对应a,b,c,d,e,f,g,dp(小数点)八段数码管有十个管教,八段+两个公共端com,与数码管内部是导通的八段......
  • 二进制转BCD8421码
    8421码是BCD码中最常用的编码,使用4位二进制表示十进制数0~9,即0000~1001。例如十进制数12转二进制为1100,转化为8421码为00010010(十进制为18),两个编码相减得6。二进制转8421的规则是≥10就加6,否则不加6进行校正。\[\begin{array}{r}10010B\\-1100B\\\hline0110B\end{array}......