Spark 内存管理

  • Spark 执行应用程序时, 会启动 Driver 和 Executor 两种 JVM 进程

    • Driver 负责创建 SparkContext 上下文, 提交任务, task的分发等。
    • Executor 负责 task 的计算任务, 并将结果返回给 Driver, 同时需要为需要持久化的 RDD 提供储存。
    • Driver 端的内存管理比较简单, 这里说的 Spark内存管理针对 Executor 端的内存管理。
    • Spark 内存管理分为 静态内存管理 和 统一内存管理, Spark1.6 之前使用的是静态内存管理, Spark1.6 之后引入了统一内存管理。
    • 静态内存管理中存储内存、执行内存和其他内存的大小在 Spark 应用程序运行期间均为固定的, 但用户可以在应用程序启动前进行配置。
    • 统一内存管理与静态内存管理的区别在于存储内存和执行内存共享同一块空间, 可以互相借用对方的空间。
    • Spark1.6 及 1.6 之后的版本默认使用的是统一内存管理。
    • 要想使用静态内存可以通过将参数 spark.memory.useLeagacyMode 设置为 true(默认为 false) 使用静态内存管理。
  • 静态内存管理分布图

  • 统一内存管理分布图

  • reduce 中 OOM(Out Of Memory) 如何处理?
    • 减少每次拉取的数据量
    • 提高 shuffle 聚合的内存比例
    • 提高 Executor 的总内存

原文地址:https://www.cnblogs.com/ronnieyuan/p/11742974.html

时间: 2024-12-09 15:02:08

Spark 内存管理的相关文章

Apache Spark 内存管理详解

Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 Spark 内存管理的脉络,抛砖引玉,引出读者对这个话题的深入探讨.本文中阐述的原理基于 Spark 2.1 版本,阅读本文需要读者有一定的 Spark 和 Java 基础,了解 RDD.Shuffle.JVM 等相关概念. 在执行 Spark 的应用程序时,Spark 集群会启动 Driver

Spark内存管理机制

Spark内存管理机制 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优. 在执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task),在各个 Executor 进程间协调任务的调度,后者负责在

【Spark-core学习之八】 SparkShuffle & Spark内存管理

[Spark-core学习之八] SparkShuffle & Spark内存管理环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark-1.6 一.SparkShuffle1. SparkShuffle概念reduceByKey会将上一个RDD中的每一个key对应的所有value聚合成一个value,然后生成一个新的RDD,元素类型是<key,v

spark内存管理器--MemoryManager源码解析

MemoryManager内存管理器 内存管理器可以说是spark内核中最重要的基础模块之一,shuffle时的排序,rdd缓存,展开内存,广播变量,Task运行结果的存储等等,凡是需要使用内存的地方都需要向内存管理器定额申请.我认为内存管理器的主要作用是为了尽可能减小内存溢出的同时提高内存利用率.旧版本的spark的内存管理是静态内存管理器StaticMemoryManager,而新版本(应该是从1.6之后吧,记不清了)则改成了统一内存管理器UnifiedMemoryManager,同一内存管

Spark内存管理

1.spark的一大特性就是基于内存计算,Driver只保存任务的宏观性的元数据,数据量较小,且在执行过程中基本不变,不做重点分析,而真正的计算任务Task分布在各个Executor中,其中的内存数据量大,且会随着计算的进行会发生实时变化,所以Executor的内存管理才分析的重点. 2.在执行Spark应用程序时,集群会启动Driver和Executor两种JVM进程,前者为主控进程,负责创建spark上下文(context),提交spark作业(job),将作业转化为计算任务(task),在

spark 源码分析之十五 -- Spark内存管理剖析

原文地址:https://www.cnblogs.com/johnny666888/p/11197519.html

王家林谈Spark性能优化第十季之全球独家揭秘Spark统一内存管理!

内容: 1.传统的Spark内存管理的问题: 2.Spark统一内存管理: 3. 展望: ==========传统的Spark内存管理的问题============ Spark内存分为三部分: Execution:Shuffles.Joins.Sort.Aggregations等等,默认情况下占用,spark.shuffle.memoryfraction默认是0.2: Storage:Persist(Canche).Large Task Result.Torrent类型的Broadcast等,默

Spark学习之路 (十一)SparkCore的调优之Spark内存模型

摘抄自:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/index.html 一.概述 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 Spark 内存管理的脉络,抛砖引玉,引出读者对这个话题的深入探讨.本文

spark记录(9)SparkCore的调优之Spark内存模型

摘抄自:https://www.cnblogs.com/qingyunzong/p/8946637.html 一.概述 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 Spark 内存管理的脉络,抛砖引玉,引出读者对这个话题的深入探讨.本文中阐述的原理基于 Spark 2.1 版本,阅读本文需要读者有一定的 Spark 和 Java 基础,了解