1. 程式人生 > >RDD的緩存,依賴,spark提交任務流程

RDD的緩存,依賴,spark提交任務流程

持久化 存儲 技術分享 alt 重要 depend 任務 cache 但是

1.RDD的緩存

Spark速度非常快的原因之一,就是在不同操作中可以在內存中持久化或緩存個數據集。當持久化某個RDD後,每一個節點都將把計算的分片結果保存在內存中,並在對此RDD或衍生出的RDD進行的其他動作中重用。這使得後續的動作變得更加迅速。RDD相關的持久化和緩存,是Spark最重要的特征之一。可以說,緩存是Spark構建叠代式算法和快速交互式查詢的關鍵。

RDD緩存方式

RDD通過persist方法或cache方法可以將前面的計算結果緩存,但是並不是這兩個方法被調用時立即緩存,而是觸發後面的action時,該RDD將會被緩存在計算節點的內存中,並供後面重用。

通過查看源碼發現cache最終也是調用了persist方法,默認的存儲級別都是僅在內存存儲一份,Spark的存儲級別還有好多種,存儲級別在object StorageLevel中定義的。

技術分享

技術分享

緩存有可能丟失,或者存儲存儲於內存的數據由於內存不足而被刪除,RDD的緩存容錯機制保證了即使緩存丟失也能保證計算的正確執行。通過基於RDD的一系列轉換,丟失的數據會被重算,由於RDD的各個Partition是相對獨立的,因此只需要計算丟失的部分即可,並不需要重算全部Partition。

2.Sprak提交任務流程

技術分享

DAG:有向無環圖(代表數據流向)

技術分享

DAGScheduler:將DAG圖劃分為一個個的stage,然後以taskset的方式提交

wordcount 切分stage的流程(兩個stage)

技術分享

stage,依賴的劃分

RDD和它依賴的父RDD(s)的關系有兩種不同的類型,即窄依賴(narrow dependency)和寬依賴(wide dependency)。

技術分享

窄依賴

窄依賴指的是每一個父RDD的Partition最多被子RDD的一個Partition使用,如map方法應用是對每個分區的數據進行處理

寬依賴

寬依賴指的是多個子RDD的Partition會依賴同一個父RDD的Partition

RDD的緩存,依賴,spark提交任務流程