spark on yarn 内存分配详解

浪院长 浪尖聊大数据

最近有不少知识星球粉丝和公众号粉丝给浪尖留言,说是不知道spark on yarn的时候,yarn如何分配Spark 的driver和executor内存的。今天浪尖就给大家分享一下spark on yarn,内存分配原理。

1. 基础概念

要掌握这个知识点,要了解以下几个点:

  1. spark driver和executor的on-heap内存是如何配置的。
  2. spark driver和excutor的off-heap内存是如何配置的。
  3. yarn的最小调度单元。
    首先,讲一下上面的这三个概念吧:

    1). spark.driver.memory

    默认值1g。driver进程的on-heap内存,driver进程就是sparkcontext初始化所在的进程。在client模式下driver的堆内存,不要通过SparkConf设置,要用--driver-memory命令替换,或者在默认的配置文件里配置。

    2). spark.driver.memoryOverhead

    默认值是max(DriverMemory*0.1,384m)。在YARN或者kubernetes模式的cluster模式下,driver端申请的off-heap内存的总量,通常是driver堆内存的6%-10%。

    3). spark.executor.memory

    默认值1g。Executor的jvm内存总量。

    4). spark.executor.memoryOverhead

    默认值max(executor*0.1,384).单个executor申请的off-heap内存的总量。该参数仅仅支持在yarn或者kubernetes上使用,通常可以是executor内存的0.06-0.1。

    5).spark.yarn.am.memory

    默认值512m,Appmaster在client模式下的内存。假如是Cluster模式下会使用spark.driver.memory来代替。

    6).Yarn的最小调度单元

    yarn调度container有个最小粒度,资源调度的时候必须是其整数倍,最小粒度的配置参数是

yarn.scheduler.minimum-allocation-mb

最小调度单元默认值是1024,单位是mb。
2.cluster模式
浪尖这里的案例是40个executor,单个executor内存申请的时候是20GB,driver是20GB,yarn的web ui截图如下:

整个APP申请的总内存是 923648MB=902GB。
spark app申请的单个 Executor内存,从1.3和1.4可以得知是:

20GB * 0.1 +20GB=22GB

那么40个executor内存是:

22GB * 40 = 880GB 

spark on yarn 的cluster模式下Driver端与appmaster是在一起的,所以appmaster内存参数无效,因此driver和executor总内存由1.1和1.2可得:

20GB * 0.1 +20GB=22G

那么计算所得的总内存是:

22GB+88 GB正好是 902GB。

上面计算的案例中,由于浪院长这里的yarn集群内存调度的最小粒度是1GB貌似,在上面的计算中没有参与度。

3.cluster模式下

此时假设是10个executor,每个executor的内存是19GB,driver的内存依然是19GB。
首先,我们先看一下,web ui的总内存:

换算成GB就是236544MB/1024 = 231GB
那么经计算可以指导单个executor的内存是:

191.1GB =20.9GB
Yarn的最小调度单元是1GB,所以单个executor调度的时候内存是21GB。
10个executor的总内存就是 21
10 = 210GB
经计算可以得到driver的内存是19*1.1GB= 21GB
那么计算所得的spark app内存和 yarn ui上所得内存一致。

4.注意点

上述计算要想正确要确保:

没有开启动态executor申请与释放,假设开启了,要视情况计算。

©著作权归作者所有:来自51CTO博客作者mob604756ed02fe的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 戳破 | hive on spark 调优点
  2. 大数据成神之路-Java高级特性增强(Volatile)
  3. linux 内存使用管理及释放
  4. 内存卡连接时显示文件夹变0字节请问怎么才能修复
  5. 内存卡出现“分区变0字节”的解决办法
  6. Mac 版 Chrome 浏览器已支持 Tab Throttling 技术,后台页面内存占
  7. Linux系统内存使用率该怎么计算
  8. MongoDB Server对于Sort排序能够支持的最大内存限制查看
  9. Linux I/O Scheduler (调度器)

随机推荐

  1. Android 内核简单分析
  2. 在mac 上配置AndroidStudio碰到的坑
  3. android HAL介绍
  4. Android(安卓)创建与解析XML(二)—— Dom方
  5. Android:Android学习路线图
  6. Android 各种实现Tab效果的实现方式
  7. Android系统移植与调试之------->如何修
  8. Android ART 垃圾回收机制
  9. Android 开发笔记 —— AndroidStudio 中
  10. android的一些开源项目