日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Spark内存管理(2)—— 统一内存管理

發(fā)布時(shí)間:2024/1/17 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark内存管理(2)—— 统一内存管理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Spark內(nèi)存管理系列文章:?
Spark內(nèi)存管理(1)—— 靜態(tài)內(nèi)存管理

堆內(nèi)內(nèi)存

Spark 1.6之后引入的統(tǒng)一內(nèi)存管理機(jī)制,與靜態(tài)內(nèi)存管理的區(qū)別在于Storage和Execution共享同一塊內(nèi)存空間,可以動(dòng)態(tài)占用對(duì)方的空閑區(qū)域?

其中最重要的優(yōu)化在于動(dòng)態(tài)占用機(jī)制,其規(guī)則如下:

  • 設(shè)定基本的Storage內(nèi)存和Execution內(nèi)存區(qū)域(spark.storage.storageFraction參數(shù)),該設(shè)定確定了雙方各自擁有的空間的范圍

  • 雙方的空間都不足時(shí),則存儲(chǔ)到硬盤?
    若己方空間不足而對(duì)方空余時(shí),可借用對(duì)方的空間(存儲(chǔ)空間不足是指不足以放下一個(gè)完整的 Block)

  • Execution的空間被對(duì)方占用后,可讓對(duì)方將占用的部分轉(zhuǎn)存到硬盤,然后”歸還”借用的空間

  • Storage的空間被對(duì)方占用后,無法讓對(duì)方”歸還”,因?yàn)樾枰紤] Shuffle過程中的很多因素,實(shí)現(xiàn)起來較為復(fù)雜

動(dòng)態(tài)內(nèi)存占用機(jī)制

動(dòng)態(tài)占用機(jī)制如下圖所示:?

憑借統(tǒng)一內(nèi)存管理機(jī)制,Spark 在一定程度上提高了堆內(nèi)和堆外內(nèi)存資源的利用率,降低了開發(fā)者維護(hù) Spark 內(nèi)存的難度,但并不意味著開發(fā)者可以高枕無憂?
譬如:如果Storage的空間太大或者說緩存的數(shù)據(jù)過多,反而會(huì)導(dǎo)致頻繁的全量垃圾回收,降低任務(wù)執(zhí)行時(shí)的性能,因?yàn)榫彺娴?RDD 數(shù)據(jù)通常都是長(zhǎng)期駐留內(nèi)存的。所以要想充分發(fā)揮 Spark 的性能,需要開發(fā)者進(jìn)一步了解存儲(chǔ)內(nèi)存和執(zhí)行內(nèi)存各自的管理方式和實(shí)現(xiàn)原理

堆外內(nèi)存

如下圖所示,相較于靜態(tài)內(nèi)存管理,引入了動(dòng)態(tài)占用機(jī)制?

計(jì)算公式

spark從1.6版本以后,默認(rèn)的內(nèi)存管理方式就調(diào)整為統(tǒng)一內(nèi)存管理模式?
由UnifiedMemoryManager實(shí)現(xiàn)

Unified MemoryManagement模型,重點(diǎn)是打破運(yùn)行內(nèi)存和存儲(chǔ)內(nèi)存之間的界限,使spark在運(yùn)行時(shí),不同用途的內(nèi)存之間可以實(shí)現(xiàn)互相的拆借

Reserved Memory

這部分內(nèi)存是預(yù)留給系統(tǒng)使用,在1.6.1默認(rèn)為300MB,這一部分內(nèi)存不計(jì)算在Execution和Storage中;可通過spark.testing.reservedMemory進(jìn)行設(shè)置;然后把實(shí)際可用內(nèi)存減去這個(gè)reservedMemor得到usableMemory?
ExecutionMemory 和 StorageMemory 會(huì)共享usableMemory * spark.memory.fraction(默認(rèn)0.75)?
注意:

  • 在Spark 1.6.1 中spark.memory.fraction默認(rèn)為0.75

  • 在Spark 2.2.0 中spark.memory.fraction默認(rèn)為0.6

User Memory

分配Spark Memory剩余的內(nèi)存,用戶可以根據(jù)需要使用?
在Spark 1.6.1中,默認(rèn)占(Java Heap - Reserved Memory) * 0.25?
在Spark 2.2.0中,默認(rèn)占(Java Heap - Reserved Memory) * 0.4

Spark Memory

計(jì)算方式為:(Java Heap – ReservedMemory) * spark.memory.fraction?
在Spark 1.6.1中,默認(rèn)為(Java Heap - 300M) * 0.75?
在Spark 2.2.0中,默認(rèn)為(Java Heap - 300M) * 0.6?
Spark Memory又分為Storage Memory和Execution Memory兩部分?
兩個(gè)邊界由spark.memory.storageFraction設(shè)定,默認(rèn)為0.5

下一篇文章中,將帶來對(duì)Spark統(tǒng)一內(nèi)存管理設(shè)計(jì)理念的介紹

總結(jié)

以上是生活随笔為你收集整理的Spark内存管理(2)—— 统一内存管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。