(1)mapreduce - 將中間結果寫入到hdfs中
目前mapreduce框架都是把中間結果寫入到hdfs中,帶來了大量的資料複製、磁碟io和序列化開銷。
(2)rdd - 資料操作管道化
rdd將具體的應用邏輯表達為一系列轉換處理,不同rdd之間的轉換操作形成依賴關係,可以實現資料管道化,避免中間儲存的結果,大大降低了資料複製、磁碟io和序列化開銷。
乙個可並行操作的有容錯機制的資料集合,本質上是乙個唯讀的分割槽記錄。
(1)每個rdd可以被分為多個分割槽;
(2)每個分割槽就是乙個資料集片段;
(3)每個rdd的不同分割槽可以儲存在不同節點上從而在集群的不同節點進行計算。
並行集合被建立後,即可並行操作。
並行集合被切片後,spark會在集群上為每乙個切片執行乙個任務。
資料唯讀,不可修改,若要修改,必須從父rdd轉換到子rdd。
rdd是一種天生具有容錯機制的特殊集合,不需要通過資料冗餘的方式(比如檢查點)實現容錯,而只需通過rdd父子依賴血緣關係重新計算得到丟失的分割槽來實現容錯,無需回滾整個系統,這樣就避免了資料複製的高開銷,而且重算過程可以在不同節點之間並行進行,實現了高效的容錯。
血緣關係:即dag拓撲排序結果
(1)採用了惰性呼叫*,通過血緣關係連線起來的一系列rdd操作實現管道化,不用擔心有過多中間資料。
(2)乙個操作得到的結果不需要儲存為中間資料,直接管道化流入到下乙個操作進行處理,保證了每個操作在處理邏輯的單一性。
資料在記憶體中的多個rdd操作之間進行傳遞,不需要「落地」到磁碟上,避免了不必要的讀寫磁碟開銷。
(1)指定rdd之間的依賴關係。
(2)接受rdd並返回rdd。
(1)執行計算並指定輸出形式;
(2)接受rdd返回乙個值或結果集。
(1)rdd讀入外部資料來源(或記憶體中的集合)進行建立;
(2)rdd經過一系列「轉換」操作,每次都會產生不同的rdd,供給下乙個「轉換」使用;
轉換操作:只是spark記錄下基礎資料集及rdd的生成軌跡,即互相之間的依賴關係。
構建起filerdd和filterrdd之間的依賴關係,形成dag圖,
這時候並沒有發生真正的計算,只是記錄轉換的軌跡;
(3)最後乙個rdd經「行動」操作進行計算處理,並輸出到外部資料來源。
行動操作:真正計算行為。
觸發真正的計算。
建立rdd物件;
sparkcontext:計算rdd之間的依賴關係,構建dag;
dagscheduler:dag圖分解成多個階段,每個階段中包含了多個任務,每個任務會被任務排程器分發給各個工作節點(worker node)上的executor去執行。
1 3RDD的設計與執行原理
rdd讀入外部資料來源 或者記憶體中的集合 進行建立 rdd經過一系列的 轉換 操作,每一次都會產生不同的rdd,供給下乙個 轉換 使用 最後乙個rdd經 行動 操作進行處理,並輸出到外部資料來源 或者變成scala集合或標量 例1 乙個spark的 hello world 程式 這裡以乙個 hel...
1 3RDD的設計與執行原理
rdd讀入外部資料來源 或者記憶體中的集合 進行建立 rdd經過一系列的 轉換 操作,每一次都會產生不同的rdd,供給下乙個 轉換 使用 最後乙個rdd經 行動 操作進行處理,並輸出到外部資料來源 或者變成scala集合或標量 例1 乙個spark的 hello world 程式 這裡以乙個 hel...
day22 RDD執行原理
從計算的角度來講,資料處理過程中需要計算資源 記憶體 cpu 和計算模型 邏輯 執行時,需要將計算資源和計算模型進行協調和整合。spark 框架在執行時,先申請資源,然後將應用程式的資料處理邏輯分解成乙個乙個的計算任務。然後將任務發到已經分配資源的計算節點上,按照指定的計算模型進行資料計算。最後得到...