第二章:彈性分佈式數據集編程
2.1 RDD的特性和目標:RDD提供良好的編程能力,並保持:自動位置感性性調度、自動容錯、可伸縮性。同時具有工做集的良好的描述能力。目前數據恢復分爲兩部分:檢查點和記錄更新,RDD支持記錄更新,而且只支持粗粒度的記錄更新,即rdd有哪些操做更新而來。rdd只支持大多數的分析性應用的編程模型,對於已不更新共享狀態的應用不適用。緩存
2.2 RDD來源:RDD只能從(1)穩定的物理存儲中的數據集(2)其餘已有的RDD 執行肯定的一系列操做生成(map、filter、groupby、join)分佈式
2.3 編程模型。(1)RDD被視爲一個對象。(2)用戶能夠再RDD作一系列action,RDD被定義後並不會當即計算,會在第一次action時被計算,action有 filter、count(獲取RDD計數)、collect(獲取所有的數據集)、save(將RDD輸出到存儲系統)(3)RDD支持緩存和分區,用戶能夠顯示的將RDD進行緩存,加快之後的複用,而且用戶也能夠將RDD按照key進行hash分區,而且分區支持一致性分區。工具
2.4 提供一個例子。性能
1:lines = spark.textFile("hdfs://...")spa
2:errors = lines.filter(_.startsWith("ERROR"))orm
3:errors.cache()對象
// Count errors mentioning MySQL:內存
4:errors.filter(_.contains("MySQL")).count()ci
// Return the time fields of errors mentioning
// HDFS as an array (assuming time is field
// number 3 in a tab-separated format):
5:errors.filter(_.contains("HDFS"))
6:.map(_.split('t')(3))
7:.collect()
(1)在執行到3行時,集羣沒有作任何的事情。(2)errors的RDD在執行第一個action也就是第4行時,纔會將errors緩存起來,並開始進行計算。(3)在errors進行第4行的filter時又生成了新的rdd,而且對新的rdd執行了count操做。(4)若是某個errors分區丟失,只要相應的lines分區進行血統操做生成相應的rdd就能夠。
2.5 RDD與分佈式共享內存
對比工具 | RDD | 分佈式共享內存 |
讀 | 批量或細粒度操做 | 細粒度操做 |
寫 | 批量轉換 | 細粒度操做 |
一致性 | 不重要(RDD不容許修改) | 取決於策略和應用程序 |
容錯性 | 細粒度,而且靠血統來維護 | 依靠檢查點和回滾來保證 |
落後任務的處理 | 任務備份 | 很難處理 |
任務安排 | 基於數據存放的位置自動實現(位置自動調動) | 取決於應用程序(經過運行時實現透明性) |
假設內存不夠 | 與已有的數據流系統相似 | 性能較差 |