1. 程式人生 > >Spark靜態記憶體管理:StaticMemoryManager

Spark靜態記憶體管理:StaticMemoryManager

例如Executor的可用Heap大小是10G,實際上Spark只能使用90%,也就是9G的大小,是由spark.storage.safetyFraction來控制。
Spark1.6.X以前JVM到底可以快取多少資料?
(1)單個Executor的Cache資料量計算公式: Heap Size * spark.storage.safetyFraction * spark.storage.memoryFraction
(2)單個Executor的角度來講:Heap Size * 90% * 60% = HeapSize * 54%,如果Executor大小是10G的話,從理論上講單個Executor可以快取的資料大小是5.4G,關於快取大小的控制引數由spark.stroage.safetyFraction和spark.stroage.memoryFraction共同決定。
(3)如果是100個Executors的話,每個的Heap是10G,那麼理論上講可以快取540G的資料,普通規模的計算基本都可以滿足。
Spark1.6.X以前ShuffleHeap佔用大小計算??
(1)計算公式:Heap Size * spark.stroage.safetyFraction *spark.shuffle.memoryFraction * spark.shuffle.safetyFraction預設情況下是Heap Size * 14.4%。
(2)單個Executor的角度來講:整個Heap大小(Heap Size) * spark.storage.safetyFraction(安全儲存的大小預設90%) * Spark.shuffle.memoryFraction(20%)Spark.shuffle.safetyFraction(可用安全閾值80%)預設情況下是Heap size * 14.4%,如果Executor大小是10G的話,理論上講單個Executor Shuffle可用大小為1.44G。
Unroll佔用空間計算及對快取資料影響是什麼??
(1)計算公式:Heap Size * spark.stroage.safetyFraction * spark.stroage.memoryFraction* spark.storage.unrollFraction。預設情況下是:HeapSize *10.8%。
(2)對Cache資料影響:由於Unroll是一個優先順序高的操作,進行Unroll操作的時候回佔用Cache的空間,即可以擠掉快取中的資料(如果該資料的級別是MemoryOnly的話,則該資料就會丟失)

相關推薦

Spark靜態記憶體管理StaticMemoryManager

例如Executor的可用Heap大小是10G,實際上Spark只能使用90%,也就是9G的大小,是由spark.storage.safetyFraction來控制。 Spark1.6.X以前JVM到底可以快取多少資料? (1)單個Executor的Cache資料量計算公式: Heap Size * spar

Spark 靜態記憶體管理

作者編輯:杜曉蝶,王瑋,任澤 Spark 靜態記憶體管理詳解一、 內容簡介      spark從1.6開始引入了動態記憶體管理模式,即執行記憶體和儲存記憶體之間可以互相搶佔。spark提供兩種記憶體分配模式,即:靜態記憶體管理和動態記憶體管理。該系列文章分別對這兩種記

大資料IMF傳奇行動絕密課程第54課Spark效能優化第十季之Spark統一記憶體管理

Spark效能優化第十季之Spark統一記憶體管理 1、傳統的Spark記憶體管理的問題 2、Spark統一記憶體管理 3、展望 Spark記憶體分為三部分:Execution、Sotrage、Other; Shuffle,當記憶體不夠的時候下,磁碟I

Spark Executor記憶體管理

堆內和堆外記憶體規劃 1.堆內記憶體:由-executor-memory配置,executor內所有併發任務共享     序列化:將物件轉換為二進位制位元組流,本質上可以理解為將非連續空間的鏈式儲存轉化為連續空間或塊儲存 2.堆外記憶體:由spark

Spark(二): 記憶體管理

     Spark 作為一個以擅長記憶體計算為優勢的計算引擎,記憶體管理方案是其非常重要的模組; Spark的記憶體可以大體歸為兩類:execution和storage,前者包括shuffles、joins、sorts和aggregations所需記憶體,後者

資料庫記憶體管理tcmalloc與jemalloc

  [[email protected] ~]# tar zxvf libunwind-1.2.1.tar.gz  [[email protected] ~]# cd libunwind-1.2

Sqlserver記憶體管理限制最大佔用記憶體

一、Sqlserver對系統記憶體的管理原則是:按需分配,且貪婪(用完不還)。它不會自動釋放記憶體,因此執行結果集大的sql語句時,資料取出後,會一直佔用記憶體,直到佔滿機器記憶體(並不會撐滿,還是有個最大限制,比機器記憶體稍小),在重啟服務前,sqlserver不會釋放該記

深入淺出Netty記憶體管理PoolSubpage

本系列: 上一節中分析瞭如何在poolChunk中分配一塊大於pageSize的記憶體,但在實際應用中,存在很多分配小記憶體的情況,如果也佔用一個page,明顯很浪費。針對這種情況,Netty提供了PoolSubpage把poolChunk的一個page節點8k

深入淺出Netty記憶體管理PoolChunk

多年之前,從C記憶體的手動管理上升到java的自動GC,是歷史的巨大進步。然而多年之後,netty的記憶體實現又曲線的回到了手動管理模式,正印證了馬克思哲學觀:社會總是在螺旋式前進的,沒有永遠的最好。的確,就記憶體管理而言,GC給程式設計師帶來的價值是不言而喻的,

深入淺出Netty記憶體管理PoolArena

前面分別分析了PoolChunk、PoolSubpage和PoolChunkList,本文主要分析PoolArena。 PoolArena 應用層的記憶體分配主要通過如下實現,但最終還是委託給PoolArena實現。 PooledByteBufAllocat

深入淺出Netty記憶體管理PoolChunkList

前面兩篇分別分析了PoolChunk和PoolSubpage的實現,本文主要分析管理PoolChunk生命週期的PoolChunkList。 PoolChunkList PoolChunkList負責管理多個chunk的生命週期,在此基礎上對記憶體分配進行進一步的優化。

[RTT例程練習] 3.3 靜態記憶體管理記憶體池mempool

記憶體池是一種靜態的記憶體管理方法。它預先將一塊固定連續的記憶體區域劃分成幾個大小不同的塊。使用者申請時就將對應大小的記憶體塊給他。這種方法的優點是不會有記憶體碎片,但不夠靈活,適用於需要頻繁存取的場合,例如buffer。 這個例子有兩個執行緒。thread1不停分配記憶體

iOS效能優化之記憶體管理Analyze、Leaks、Allocations的使用和案例程式碼

一. 一些相關概念 1.記憶體空間的劃分: 我們知道,一個程序佔用的記憶體空間,包含5種不同的資料區:(1)BSS段:通常是存放未初始化的全域性變數;(2)資料段:通常是存放已初始化的全域性變數。(3)程式碼段:通常是存放程式執行程式碼。(4)堆:通常是用於存放程序執行中被

Linux記憶體管理HighMemory

HighMemory介紹 Linux一般把整個4GB可以map的記憶體中的1GB用於低端記憶體。從0xC0000000開始的話(CONFIG_PAGE_OFFSET配置),低端記憶體的地址範圍就是0xC0000000到high_memory地址。 high_

iOS記憶體管理記憶體洩露除錯的常用技巧

在往下看之前請下載例項MemoryProblems,我們將以這個工程展開如何檢查和解決記憶體問題。 懸掛指標問題 懸掛指標(Dangling Pointer)就是當指標指向的物件已經釋放或回收後,但沒有對指標做任何修改(一般來說,將它指向空指標),而是仍然指向原來已經回收的地址。如

Spark 統一記憶體管理模型詳解

其實 Spark UI 上面顯示的 Storage Memory 可用記憶體等於堆內記憶體和堆外記憶體之和,計算公式如下: 堆內 systemMemory = 17179869184 位元組 reservedMemory = 300MB = 300 * 1024 *

JVM記憶體管理記憶體區域和記憶體洩漏

VM執行時資料區域 JVM執行Java程式的過程中,會使用到各種資料區域,這些區域有各自的用途、建立和銷燬時間。根據《Java虛擬機器規範(第二版)》(下文稱VM Spec)的規定,JVM包括下列幾個執行時資料區域: 1.程式計數器(Program Counter Register): 每一個Java執

Linux記憶體管理CMA

某些驅動需要用到一大塊連續的實體記憶體,但使用kmalloc等很分配很大的連續記憶體。 所以這裡有一種三星實現叫CMA的方式,來連續的大記憶體分配。 Why is it needed? Issue 1: Camera, Video Codec等Multimedia Device需要連續的數MB大小的Me

C語言動態記憶體管理malloc、realloc、calloc以及free函式

我們已經掌握的記憶體開闢方式有: int val = 20;//在棧空間上開闢四個位元組 char arr[10] = {0};//在棧空間上開闢10個位元組的連續空間 但是這種開闢空間的方式有兩個特點: 1. 空間開闢的大小是固定的。

作業系統的學習(2)——實體記憶體管理連續記憶體分配

記憶體的最小訪問單位是位元組(8it),一般計算機系統是32位匯流排,一次讀寫可以讀或者寫32位也就是4位元組。 CPU裡會看到快取記憶體,快取記憶體就是在進行讀寫指令或者指令執行的過程中,訪問資料都需要從記憶體中讀資料,如果這時候有大量資料需要讀寫或者重複利