首頁(yè)技術(shù)文章正文

RDD緩存有哪些特點(diǎn)?

更新時(shí)間:2023-02-23 來(lái)源:黑馬程序員 瀏覽量:

RDD之間進(jìn)行相互迭代計(jì)算(Transformation的轉(zhuǎn)換),當(dāng)執(zhí)行開啟后,新RDD的生成,代表老RDD的消失。RDD的數(shù)據(jù)是過(guò)程數(shù)據(jù),只在處理的過(guò)程中存在,一旦處理完成,就不見了。這個(gè)特性可以最大化的利用資源,老舊RDD沒(méi)用了就從內(nèi)存中清理,給后續(xù)的計(jì)算騰出內(nèi)存空間。

例如上圖,rd3被2次使用,第一次使用之后,其實(shí)RDD3就不存在了.第二次用的時(shí)候,只能基于RDD的血緣關(guān)系,從RDD1重新執(zhí)行,構(gòu)建出來(lái)RDD3,供RDD5使用。

RDD數(shù)據(jù)

上述的場(chǎng)景,肯定要執(zhí)行優(yōu)化,優(yōu)化就是:RDD3如果不消失,那么RDD1→RDD2→RDD3這個(gè)鏈條就不會(huì)執(zhí)行2次,或者更多次RDD的緩存技術(shù):Spark提供了緩存API,可以讓我們通過(guò)調(diào)用APl,將指定的RDD數(shù)據(jù)保留在內(nèi)存或者硬盤上緩存的API。

#RDD3被2次使用,可以加入緩存進(jìn)行優(yōu)化
rdd3.cache()#緩存到內(nèi)存中.
rdd3.persist(StorageLevel.MEMORY_ONLY)      #僅內(nèi)存緩存
rdd3.persist(StorageLevel.MEMORY_ONLY_2)    #僅內(nèi)存緩存,2個(gè)副本
rdd3.persist(StorageLevel.DISK_ONLY)        #僅緩存硬盤上
rdd3.persist(StorageLeveL.DISK_ONLY_2)      #僅緩存硬盤上,2個(gè)副本
rdd3.Dtrsist (StorageLevet.DISK_ONLY_3)     #僅緩存硬盤上,3個(gè)副本
rdd3.per sist(StorageLeveL.MEMORY_AND_DISK) #先放內(nèi)存,不夠放硬盤
rdd3.persist(StorageLeve1.MEMORY_AND_DISK_2)#先放內(nèi)存,不夠放硬盤,2個(gè)副本
rdd3.persist(StorageLevel.OFF_HEAP)         #堆外內(nèi)存(系統(tǒng)內(nèi)存)
#如上API,自行選擇使用即可
#一般建議使用rdd3.persist(StorageLevel.MEMORY_AND_DISK)
#如果內(nèi)存比較小的集群,建議使用rdd3.persist(StorageLevel.DISK_ONLY)或者就別用緩存了用CheckPoint

#主動(dòng)清理緩存的API
rdd.unpersist()

RDD緩存特點(diǎn)

緩存技術(shù)可以將過(guò)程RDD數(shù)據(jù),持久化保存到內(nèi)存或者硬盤上。

但是,這個(gè)保存在設(shè)定上是認(rèn)為不安全的,緩存的數(shù)據(jù)在設(shè)計(jì)上是認(rèn)為有丟失風(fēng)險(xiǎn)的。所以,緩存有一個(gè)特點(diǎn)就是:其保留RDD之間的血緣(依賴)關(guān)系,一旦緩存丟失,可以基于血緣關(guān)系的記錄,重新計(jì)算這個(gè)RDD的數(shù)據(jù)。

緩存如何丟失:在內(nèi)存中的緩存是不安全的,比如斷電\計(jì)算任務(wù)內(nèi)存不足,把緩存清理給計(jì)算讓路,硬盤中因?yàn)橛脖P損壞也是可能丟失的。

RDD緩存的保存過(guò)程:

RDD緩存保存過(guò)程



分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!