国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

一篇文章了解 Spark Shuffle 内存使用

发布时间:2019/07/29标签:   内存    点击量:

原标题:一篇文章了解 Spark Shuffle 内存使用
在应用 Spark 停止盘算时,咱们常常会遇到功课 (Job) Out Of Memory(OOM) 的情形,并且很大一局部情形是产生在 Shuffle 阶段。那末在 Spark Shuffle 中详细是哪些处所会应用比拟多的内存而有能够招致 OOM 呢? 为此,本文将缭绕以上成绩梳理 Spark 内存治理和 Shuffle 进程中与内存应用相干的常识;而后,扼要剖析下在 Spark Shuffle 中有能够招致 OOM 的起因。1、Spark 内存治理和花费模子在剖析 Spark Shuffle 内存应用之前。咱们起首懂得下以下成绩:当一个 Spark 子义务 (Task) 被调配到 Executor 上运转时,Spark 治理内存以及花费内存的大要模子是甚么样呢?(注:因为 OOM 重要产生在 Executor 端,以是接上去的探讨重要针对 Executor 真个内存治理和应用)。1,在 Spark 中,应用形象类 MemoryConsumer 来表现须要应用内存的花费者。在这个类中界说了调配,开释以及 Spill 内存数据到磁盘的一些方式或许接口。详细的花费者能够继续 MemoryConsumer 从而完成详细的行动。 因而,在 Spark Task 履行进程中,会有种种范例差别,数目纷歧的详细花费者。如在 Spark Shuffle 中应用的 ExternalAppendOnlyMap, ExternalSorter 等等(详细前面会剖析)。2,MemoryConsumer 会将请求,开释相干内存的任务交由 TaskMemoryManager 来履行。当一个 Spark Task 被调配到 Executor 上运转时,会创立一个 TaskMemoryManager。在 TaskMemoryManager 履行调配内存之前,须要起首向 MemoryManager 停止请求,而后由 TaskMemoryManager 借助 MemoryAllocator 履行现实的内存调配。3,Executor 中的 MemoryManager 会同一治理内存的应用。因为每个 TaskMemoryManager 在履行现实的内存调配之前,会起首向 MemoryManager 提出请求。因而 MemoryManager 会对以后过程应用内存的情形有着全局的懂得。MemoryManager,TaskMemoryManager 和 MemoryConsumer 之前的对应关联,以下图。整体上,一个 MemoryManager 对应着最少一个 TaskMemoryManager (详细由 executor-core 参数指定),而一个 TaskMemoryManager 对应着多个 MemoryConsumer (详细由义务而定)。

一篇文章了解 Spark Shuffle 内存使用
懂得了以上内存花费的团体进程当前,有两个成绩须要留神下:1,当有多个 Task 同时在 Executor 上履行时, 将会有多个 TaskMemoryManager 同享 MemoryManager 治理的内存。那末 MemoryManager 是怎样调配的呢?谜底是每个义务能够调配到的内存范畴是 [1 / (2 * n), 1 / n],此中 n 是正在运转的 Task 个数。因而,多个并发运转的 Task 会使得每个 Task 能够取得的内存变小。2,后面提到,在 MemoryConsumer 中有 Spill 方式,当 MemoryConsumer 请求不到充足的内存时,能够 Spill 以后内存到磁盘,从而幸免无克制的应用内存。然而,关于堆内内存的请求和开释现实是由 JVM 来治理的。因而,在统计堆内内存详细应用量时,斟酌机能等各方面起因,Spark 现在采纳的是抽样统计的方法来盘算 MemoryConsumer 曾经应用的内存,从而形成堆内内存的现实应用量不是特殊正确。从而有能够由于不能实时 Spill 而招致 OOM。2、Spark Shuffle 进程团体上 Spark Shuffle 详细进程以下图,重要分为两个阶段:Shuffle Write 和 Shuffle Read。Write 阶段大要阅历排序(最低请求是须要依照分区停止排序),能够的聚合 (combine) 和合并(有多个文件 spill 磁盘的情形 ),终极每个写 Task 会发生数据和索引两个文件。此中,数据文件会依照分区停止存储,即雷同分区的数据在文件中是持续的,而索引文件记载了每个分区在文件中的肇端和停止地位。而关于 Shuffle Read, 起首能够须要经过收集从各个 Write 义务节点猎取给定分区的数据,即数据文件中某一段持续的地区,而后经由排序,合并等进程,终极构成盘算成果。

版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号