Spark統(tǒng)一內(nèi)存管理

spark從1.6.0開始內(nèi)存管理發(fā)生了變化眼姐,原來的內(nèi)存管理由StaticMemoryManager實(shí)現(xiàn)昌阿,現(xiàn)在被稱為Legacy,在1.5.x和1.6.0中運(yùn)行相同代碼的行為是不同的锻霎,為了兼容Legacy,可以通過spark.memory.useLegacyMode來設(shè)置,默認(rèn)該參數(shù)是關(guān)閉的。

前面有一篇介紹spark內(nèi)存管理的文章spark內(nèi)存概述,現(xiàn)在介紹1.6.0的內(nèi)存管理,由UnifiedMemoryManager實(shí)現(xiàn)瓤狐。

1.6.0的統(tǒng)一內(nèi)存管理如下:

Spark-Memory-Management-1.6.0
Spark-Memory-Management-1.6.0

主要有三部分組成:

1 Reserved Memory

這部分內(nèi)存是預(yù)留給系統(tǒng)使用,是固定不變的批幌。在1.6.0默認(rèn)為300MB(RESERVED_SYSTEM_MEMORY_BYTES = 300 * 1024 * 1024)础锐,這一部分內(nèi)存不計(jì)算在spark execution和storage中,除了重新編譯spark和spark.testing.reservedMemory,Reserved Memory是不可以改變的荧缘,spark.testing.reservedMemory不推薦使用在實(shí)際運(yùn)行環(huán)境中皆警。是用來存儲(chǔ)Spark internal objects,并且限制JVM的大小截粗,如果executor的大小小于1.5 * Reserved Memory = 450MB 信姓,那么就會(huì)報(bào) “please use larger heap size”的錯(cuò)誤,源碼如下鸵隧。

    val minSystemMemory = reservedMemory * 1.5
    if (systemMemory < minSystemMemory) {
      throw new IllegalArgumentException(s"System memory $systemMemory must " +
        s"be at least $minSystemMemory. Please use a larger heap size.")
    }

2 User Memory

分配Spark Memory剩余的內(nèi)存,用戶可以根據(jù)需要使用意推《固保可以存儲(chǔ)RDD transformations需要的數(shù)據(jù)結(jié)構(gòu),例如菊值, 重寫spark aggregation,使用mapPartition transformation外驱,通過hash table來實(shí)現(xiàn)aggregation,這樣使用的就是User Memory腻窒。在1.6.0中昵宇,計(jì)算方法為(“Java Heap” – “Reserved Memory”) * (1.0 – spark.memory.fraction),默認(rèn)為(“Java Heap” – 300MB) * 0.25儿子,比如4GB的heap大小瓦哎,那么User Memory的大小為949MB。由用戶來決定存儲(chǔ)的數(shù)據(jù)量典徊,因此要遵守這個(gè)邊界杭煎,不然會(huì)導(dǎo)致OOM。

3 Spark Memory

計(jì)算方式是(“Java Heap” – “Reserved Memory”) * spark.memory.fraction卒落,在1.6.0中羡铲,默認(rèn)為(“Java Heap” – 300MB) * 0.75。例如推的大小為4GB儡毕,那么Spark Memory為2847MB也切。Spark Memory又分為Storage MemoryExecution Memory兩部分。兩個(gè)邊界由spark.memory.storageFraction設(shè)定腰湾,默認(rèn)為0.5雷恃。但是兩部分可以動(dòng)態(tài)變化,相互之間可以借用费坊,如果一方使用完倒槐,可以向另一方借用。先看看兩部分是如何使用的附井。

  • Storage Memory 用來存儲(chǔ)spark cached data也可作為臨時(shí)空間存儲(chǔ)序列化unroll讨越,broadcast variables作為cached block存儲(chǔ),但是需要注意永毅,這是unroll源碼把跨,unrolled block如果內(nèi)存不夠,會(huì)存儲(chǔ)在driver端沼死。broadcast variables大部分存儲(chǔ)級(jí)別為MEMORY_AND_DISK着逐。

  • Execution Memory 存儲(chǔ)Spark task執(zhí)行過程中需要的對象,例如,Shuffle中map端中間數(shù)據(jù)的存儲(chǔ)耸别,以及hash aggregation中的hash table健芭。如果內(nèi)存不足,該空間也容許spill到磁盤秀姐。

Execution Memory不可以淘汰block吟榴,不然執(zhí)行的時(shí)候就會(huì)fail,如果找不到block囊扳。Storage Memory中的內(nèi)容可以淘汰。Execution Memory滿足兩種情況可以向Storage Memory借用空間:

  1. Storage Memory還有free空間

  2. Storage Memory大于初始化時(shí)的空間("Spark Memory" * spark.memory.storageFraction = (“Java Heap” – “Reserved Memory”) * spark.memory.fraction * spark.memory.storageFraction)

Storage Memory只有在Execution Memory有free空間時(shí)兜看,才可以借用锥咸。

參考

spark memory management

Spark Broadcast

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市细移,隨后出現(xiàn)的幾起案子搏予,更是在濱河造成了極大的恐慌,老刑警劉巖弧轧,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雪侥,死亡現(xiàn)場離奇詭異,居然都是意外死亡精绎,警方通過查閱死者的電腦和手機(jī)速缨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來代乃,“玉大人旬牲,你說我怎么就攤上這事「橄牛” “怎么了原茅?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長堕仔。 經(jīng)常有香客問我擂橘,道長,這世上最難降的妖魔是什么摩骨? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任通贞,我火速辦了婚禮,結(jié)果婚禮上仿吞,老公的妹妹穿的比我還像新娘滑频。我一直安慰自己,他們只是感情好唤冈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布峡迷。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绘搞。 梳的紋絲不亂的頭發(fā)上彤避,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音夯辖,去河邊找鬼琉预。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蒿褂,可吹牛的內(nèi)容都是我干的圆米。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼啄栓,長吁一口氣:“原來是場噩夢啊……” “哼娄帖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昙楚,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對情侶失蹤近速,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后堪旧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體削葱,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年淳梦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了析砸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爆袍,死狀恐怖干厚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情螃宙,我是刑警寧澤蛮瞄,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站谆扎,受9級(jí)特大地震影響挂捅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜堂湖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一闲先、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧无蜂,春花似錦伺糠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累驮。三九已至,卻和暖如春舵揭,著一層夾襖步出監(jiān)牢的瞬間谤专,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工午绳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留置侍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓拦焚,卻偏偏與公主長得像蜡坊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子赎败,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 歡迎關(guān)注我的微信公眾號(hào):FunnyBigData 作為打著 “內(nèi)存計(jì)算” 旗號(hào)出道的 Spark算色,內(nèi)存管理是其非常...
    牛肉圓粉不加蔥閱讀 4,167評(píng)論 2 24
  • 本文基于Spark 1.6.0之后的版本Spark 1.6.0引入了對堆外內(nèi)存的管理并對內(nèi)存管理模型進(jìn)行了改進(jìn),S...
    Woople閱讀 987評(píng)論 0 7
  • 1. 存儲(chǔ)總體結(jié)構(gòu) Spark存儲(chǔ)結(jié)構(gòu)分為兩層:內(nèi)存存儲(chǔ)和磁盤存儲(chǔ)螟够,其中內(nèi)存主要用作緩存以及任務(wù)計(jì)算時(shí)期數(shù)據(jù)存儲(chǔ),...
    aaron1993閱讀 897評(píng)論 0 1
  • 本文1峡钓、2妓笙、3節(jié)介紹了Spark 內(nèi)存相關(guān)之識(shí),第4節(jié)描述了常見錯(cuò)誤類型及產(chǎn)生原因并給出了解決方案能岩。 1 堆內(nèi)和堆...
    荒湖閱讀 22,953評(píng)論 4 33
  • 正文內(nèi)容分為上下兩篇來闡述寞宫,下一篇見《Spark內(nèi)存管理詳解(下)——內(nèi)存管理》[https://www.jian...
    LeonLu閱讀 9,590評(píng)論 11 43