|NO.Z.00106|——————————|BigDataEnd|——|Hadoop&Spark.V04|——|Spark.v04|Spark 原理 源码|内存管理&执行内存管理|

一、执行内存管理
### --- 执行内存管理

~~~     执行内存主要用来存储任务在执行 Shuffle 时占用的内存,
~~~     Shuffle 是按照一定规则对 RDD 数据重新分区的过程,
~~~     Shuffle 的 Write 和 Read 两阶段对执行内存的使用:
### --- Shuffle Write

~~~     在 map 端会采用 ExternalSorter 进行外排,在内存中存储数据时主要占用堆内执行空间。
### --- Shuffle Read

~~~     在对 reduce 端的数据进行聚合时,要将数据交给 Aggregator 处理,
~~~     在内存中存储数据时占用堆内执行空间
~~~     如果需要进行最终结果排序,则要将再次将数据交给 ExternalSorter 处理,
~~~     占用堆内执行空间在 ExternalSorter 和 Aggregator 中,
~~~     Spark 会使用一种叫 AppendOnlyMap 的哈希表在堆内执行内存中存储数据,
~~~     但在 Shuffle 过程中所有数据并不能都保存到该哈希表中,
~~~     当这个哈希表占用的内存会进行周期性地采样估算,
~~~     当其大到一定程度,无法再从 MemoryManager 申请到新的执行内存时,
~~~     Spark 就会将其全部内容存储到磁盘文件中,这个过程被称为溢存(Spill),
~~~     溢存到磁盘的文件最后会被归并。
### --- 源码提取说明

~~~     # 源码提取说明:ExternalAppendOnlyMap.scala
~~~     # 55行~66class ExternalAppendOnlyMap[K, V, C](
    createCombiner: V => C,
    mergeValue: (C, V) => C,
    mergeCombiners: (C, C) => C,
    serializer: Serializer = SparkEnv.get.serializer,
    blockManager: BlockManager = SparkEnv.get.blockManager,
    context: TaskContext = TaskContext.get(),
    serializerManager: SerializerManager = SparkEnv.get.serializerManager)
  extends Spillable[SizeTracker](context.taskMemoryManager())
  with Serializable
  with Logging
  with Iterable[(K, C)] {
### --- Spark 的存储内存和执行内存有着截然不同的管理方式:

~~~     # 对存储内存来说,
~~~     # Spark 用一个 LinkedHashMap 来集中管理所有的 Block,
~~~     # Block 由需要缓存的 RDD 的Partition 转化而成;
~~~     # 对执行内存来说,Spark 用 AppendOnlyMap 来存储 Shuffle 过程中的数据,
~~~     # 在 Tungsten 排序中甚至抽象成为页式内存管理,开辟了全新的 JVM 内存管理机制。

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(18)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示