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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/weijiqian/p/14004226.html