写点什么

Container killed by YARN for exceeding memory limits

  • 2022 年 7 月 04 日
  • 本文字数:1183 字

    阅读完需:约 4 分钟

大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能 code 下能 teach 的全能奶爸

如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~




经常我们提交任务到 yarn 上后出现 内存溢出的错误 类似


ExecutorLostFailure (executor 30 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 40.2 GB of 40 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
复制代码


这个错误总会使你的 job 夭折。它的意思是:因为超出内存限制,集群停掉了,然后就会无尽的重试重试,直到彻底崩了


问题:出现以上问题原因.


数据出现了倾斜等原因导致其中一个 contaimer 内存负载太大 运行失败


container 内存分配图



建议解决方式


1、增加分区数,或对分区的具体逻辑修改呢(源码)避免出现数据倾斜这个通过 scala 语法进行修改


2、但是对 spark sql 进行任务调度时一般难控制,可采用增加 spark.yarn.executor.memoryOverhead 设置为最大值,可以考虑一下 4096。这个数值一般都是 2 的次幂


影响其几个参数:


yarn.scheduler.maximum-allocation-mb


这个参数表示每个 container 能够申请到的最大内存,一般是集群统一配置。Spark 中的 executor 进程是跑在 container 中,所以 container 的最大内存会直接影响到 executor 的最大可用内存。当你设置一个比较大的内存时,日志中会报错,同时会打印这个参数的值。如下图 ,6144MB,即 6G 本集群 cm 设置 100G 从前 ambari 中设置 10G


spark.yarn.executor.memoryOverhead


executor 执行的时候,用的内存可能会超过 executor-memoy,所以会为 executor 额外预留一部分内存。spark.yarn.executor.memoryOverhead 代表了这部分内存。这个参数如果没有设置,会有一个自动计算公式(位于 ClientArguments.scala 中),


--conf spark.yarn.executor.memoryOverhead=4096
复制代码


其中,MEMORY_OVERHEAD_FACTOR 默认为 0.1,executorMemory 为设置的 executor-memory, MEMORY_OVERHEAD_MIN 默认为 384m。参数 MEMORY_OVERHEAD_FACTOR 和 MEMORY_OVERHEAD_MIN 一般不能直接修改,是 Spark 代码中直接写死的


executor-memory 计算


val executorMem = args.executorMemory + executorMemoryOverhead


Spark 中 executor-memory


程序中可以通过 --executor-memory 来设置 executor 执行时所需的 memory


--executor-memory 40G
复制代码


1) 如果没有设置 spark.yarn.executor.memoryOverhead,


executorMem= X+max(X*0.1,384)


如果设置了 spark.yarn.executor.memoryOverhead(整数,单位是 M)


executorMem=X +spark.yarn.executor.memoryOverhead


设置 executorMem 需要满足的条件:


xecutorMem< yarn.scheduler.maximum-allocation-mb



结束语

如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~

可关注公众号【怀瑾握瑜的嘉与嘉】,获取资源下载方式

发布于: 刚刚阅读数: 5
用户头像

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
Container killed by YARN for exceeding memory limits_spark_怀瑾握瑜的嘉与嘉_InfoQ写作社区