• Spark内核-内存管理


    Spark 集群会启动 Driver 和 Executor 两种 JVM 进程

    我们只关注Executor的内存.

    分为堆内内存和堆外内存

    内存分为

    存储内存 : 存储数据用的.

    执行内存: 执行shuffle时占用的.

    其他内存: 用户自定义的对象.

    堆内内存

    这是由jvm管理.spark自己不知道,只能spark自己估算,有时准,有时不准.

    堆外内存

    spark找操作系统要的内存.自己可以管理,其他和堆内内存一样.

    spark.memory.offHeap.enabled  默认不开启,由此参数控制堆外内存的开启关闭
    spark.memory.offHeap.size   内存大小.
    

    内存空间分配

    静态内存管理(老的)

    运行程序时,就要设置存储内存和执行内存的比例,不能更改,太辣鸡,弃之.

    统一内存管理(新的)

    可以动态调整存储内存执行内存的比率.

    但是,执行内存是大哥,当自己的被别人占据后,如果想要,可以驱逐别人.

    存储内存是小弟,当自己的地盘被执行内存占领后,要不回来.

    存储内存管理

    RDD持久化机制

    如果一个 RDD 上要执行多次行动,可以在第一次行动中使用 persist 或 cache 方法,在内存或磁盘中持久化或缓存这个 RDD,从而在后面的行动时提升计算速度。

    对于存储内存来说,Spark 用一个 LinkedHashMap 来集中管理所有的 Block,Block 由需要缓存的 RDD 的 Partition 转化而成

    执行内存管理

    执行内存主要用来存储任务在执行 Shuffle 时占用的内存

    Shuffle 的 Write 和 Read 两阶段对执行内存的使用

    看不懂.

    作者:十一喵先森
    链接:https://juejin.im/post/5e1c41c6f265da3e152d1e62
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    Educational Codeforces Round 64(ECR64)
    [网络流]BZOJ4657 tower 最小割约束
    009:JSON
    008:数据类型
    007:MySQL SSL
    006:多实例安装
    005: 存储引擎介绍
    004:MySQL数据库体系结构
    003:MySQL账号创建授权以及Workbench
    002:MySQL升级以及访问连接
  • 原文地址:https://www.cnblogs.com/weijiqian/p/14004226.html
Copyright © 2020-2023  润新知