Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 1162|回复: 0

spark异常篇-Removing executor 5 with no recent heartbeats: 120504 ms exceeds timeout 120000 ms 可能的解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-6-4 14:51:02 | 显示全部楼层 |阅读模式

    问题描述与分析

    题目中的问题大致可以描述为:

    由于某个 Executor 没有按时向 Driver 发送心跳,而被 Driver 判断该 Executor 已挂掉,此时 Driver 要把 该 Executor 上执行的任务发送给另外一个 Executor 重新执行;

    默认等待时长为 spark.network.timeout=120s 

    完整报错大概如下

    17/01/13 09:13:08 WARN spark.HeartbeatReceiver: Removing executor 5 with no recent heartbeats: 161684 ms exceeds timeout 120000 ms 17/01/13 09:13:08 ERROR cluster.YarnClusterScheduler: Lost executor 5 on slave10: Executor heartbeat timed out after 161684 ms
    17/01/13 09:13:08 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, slave10): ExecutorLostFailure (executor 5 exited caused by one of the running tasks) Reason: Executor heartbeat timed out after 161684 ms
    17/01/13 09:13:08 INFO scheduler.DAGScheduler: Executor lost: 5 (epoch 0)
    17/01/13 09:13:08 INFO cluster.YarnClusterSchedulerBackend: Requesting to kill executor(s) 5
    17/01/13 09:13:08 INFO scheduler.TaskSetManager: Starting task 0.1 in stage 0.0 (TID 5, slave06, partition 0,RACK_LOCAL, 8029 bytes)
    17/01/13 09:13:08 INFO storage.BlockManagerMasterEndpoint: Trying to remove executor 5 from BlockManagerMaster.
    17/01/13 09:13:08 INFO storage.BlockManagerMasterEndpoint: Removing block manager BlockManagerId(5, slave10, 34439)
    17/01/13 09:13:08 INFO storage.BlockManagerMaster: Removed 5 successfully in removeExecutor
    17/01/13 09:13:08 INFO scheduler.DAGScheduler: Host added was in lost list earlier: slave10
    17/01/13 09:13:08 INFO yarn.ApplicationMaster$AMEndpoint: Driver requested to kill executor(s) 5.
    17/01/13 09:13:08 INFO scheduler.TaskSetManager: Finished task 0.1 in stage 0.0 (TID 5) in 367 ms on slave06 (5/5)
    17/01/13 09:13:08 INFO scheduler.DAGScheduler: ResultStage 0 (saveAsNewAPIHadoopFile at DataFrameFunctions.scala:55) finished in 162.495 s

     

    Executor 没有按时向 Driver 发送心跳,原因可能为

    1. 真的挂掉

    2. 执行某任务由于资源不够造成死机

    3. 其他原因

    我们主要解决第二个

     

    解决方案

    增加资源---增加 memoryOverhead

    简单来解释下 

    spark.yarn.executor.memoryOverhead 的内存是由 spark tungsten 自己的管理机制去管理,用的时候申请,用完释放,内存利用率高,【鉴于 JVM 的内存管理,GC 效率低,才有了这种管理机制】

    而 spark.executor.memory 的内存是由 JVM 管理,分配,回收,涉及多种垃圾回收机制,用不好效率低

     

    原因分析

    如果用于存储 RDD 的空间不足,那么后存储的 RDD 的 partition 会覆盖之前的 RDD 的 partition,导致之前的 RDD 丢失,当使用丢失的 RDD partition 时,需要重新计算;

    如果 java 堆或者永久代的内存不足,则会产生各种 OOM 情况,executor 会被杀死,spark 会重新申请一个 container 运行 executor,失败的 task 或者丢失的数据都会在这个 executor 上重新执行;

    如果实际运行过程中,ExecutorMemory + MemoryOverhead 之和(JVM 进程总内存) 超过 container 容量,yarn 会直接杀死该 container,executor 日志中不会有记录,spark 会重新申请 container 运行 executor;

    如果 java 堆以外的 JVM 进程占用内存较多,需要将 MemoryOverhead 设置足够大,否则 executor 将会被杀死

     

     

    具体操作

    spark.yarn.executor.memoryOverhead 的默认配置为 max(executorMemory * 0.10, 384),单位为 M

    我们可以手动设置

    --conf spark.yarn.executor.memoryOverhead=512

    --conf spark.yarn.driver.memoryOverhead=512

     

    减少资源占用---使用 combineByKey

    如 reduceByKey,可以有效的减少内存占用

    rdd.repartition(20).map(mymap).groupBy(mygroup).mapValues(len).collect()
    rdd.repartition(20).map(mymap).map(mygroup).reduceByKey(lambda x, y: x+y).collect()

     

    另外还有几种较为简单的方法

    1. 增加等待时长 spark.network.timeout

    2. 在资源不变的情况下,增加 executor 内存,减少 executor 数量,增加 executor cores,这个自己想想,反正就是总的不变,保证每个 task 有足够内存

     

     

    参考资料:

    https://blog.csdn.net/gangchengzhong/article/details/76474129

    https://www.cnblogs.com/RichardYD/p/6281745.html  spark yarn任务的executor 无故 timeout之原因分析

    http://f.dataguru.cn/thread-906602-1-1.html  spark.yarn.executor.memoryOverhead

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-30 22:00 , Processed in 0.071814 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表