【Yarn】spark/flink 作业的executor内存参数和Yarn web ui 显示不一致问题

前言

最近在做 CDH -> CDP 的迁移,Yarn迁移完成后,发现在spark/flink 作业的executor内存参数和Yarn web ui 显示申请的内存不一致。

例如:一个 spark 任务申请了 10个 executor,每个executor 内存为 1G,driver内存为 1G ,共11G,但是Yarn web ui 上面显示单个容器内存为 2G,共22G。

环境

  • yarn 3.0
  • capacity scheduler

问题排查

首先需要明确一点,不管是 spark/flink 任务,申请的 executor 的内存并不等于 yarn 的容器内存。

在这里插入图片描述

yarn 的容器内存肯定是要大于,spark/flink 的申请的executro的内存的。但是为什么是总大于1G,这个就是我们今天的排查方向。

每个executor从YARN请求的内存 = spark-executor-memory + spark.yarn.executor.memoryOverhead

问题原因

Capacity Scheduler 分配容器内存的大小是最小容器内存的倍数

案例一:如果你的每个容器的最小调度器mb内存是1gb,而你要求一个4.5gb大小的容器,调度器会把这个请求四舍五入为5gb。对于非常高的最小值,这可能会造成巨大的资源浪费问题。

案例二:如果我们最小的容器内存为 4G,我们申请一个5GB的资源,我们将得到8GB的服务,这样为我们提供甚至从未计划使用的3GB的额外资源。造成资源浪费。

配置最小和最大容器尺寸时,最大值应能被最小值整除。

在这里插入图片描述

结论

经过一系列排查,得出以下结论。

  1. yarn 的容器申请的内存肯定是要大于,spark/flink 的申请的executro的内存的。
  2. Capacity Scheduler 是根据最小容器内存的倍数分配,比如我们设置 executor memory 为1G, yarn 申请的容器内存肯定要高于1G,由于倍数分配的问题,最终yarn containor内存分配为2G。
  3. 这里顺便说下 Fair Scheduler 的机制是类似的,都是整数倍的分配,不同的是根据 yarn.scheduler.increment-allocation-mb 这个参数来设置的,默认为 512M

参考

  • https://blog.cloudera.com/yarn-capacity-scheduler/
  • https://hadoop.apache.org/docs/r3.1.2/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值