rdd核心概念
resilientdistributed dataset,彈性分布式資料集
1是唯讀的,分割槽記錄的集合物件
2分割槽(partition)是rdd的基本組成單位,其決定了平行計算的粒度。應用程式對rdd的轉換最終都是對其分割槽的轉換。
3使用者可以指定rdd的分割槽個數,如果不指定則預設程式分配到的cpu的core數
4每個分割槽被影射為乙個block,在呼叫hdfs底層時此block對應於hdfs的block(預設128m),spark通過blockmanager來管理block是乙個block管理器。
rdd的建立
例sc.textfile("hdfs://shb01:9000/word").flatmap(_.split("")).map((_,1)).reducebykey(_+_).collect
1檔案系統載入
通過textfile從檔案系統(hive,hdfs)載入資料建立乙個rdd
2rdd之間的轉換
例子中flatmap方法會產生rdd,之後在此rdd的基礎上每呼叫乙個方法就會建立乙個rdd,如果前面的父rdd如果不呼叫cache方法儲存則會消失。
3通過函式轉換
通過parallelize,makerdd方法也可以轉換生成rdd
val rdd1 =sc.makerdd(array(("a",1),("b",2),("c",3)))
val rdd1 =sc.parallelize(array(10,12,3,5,23)) numslices)
運算元在spark中函式又稱為運算元,運算元分為兩大類轉換運算元(transformations)和行動(action)運算元.
轉換型運算元:不會立即執行,不會觸發計算通常使rdd之間互相轉換,轉換型運算元又分為value型運算元和key-value型運算元
行動行運算元:立即執行觸發dag計算
value型運算元:
key-value型運算元:使用key-value型運算元必須引入sparkcontext._
importorg.apache.spark.sparkcontext._
運算元作用於rdd上,但由於rdd是由partition(分割槽)組成,所以運算元最終還是作用於分割槽上。
例:val file =sc.textfile("hdfs://shb01:9000/word")
val errors = file.filter(line =>line.contains("error")).count()
這是乙個過濾日誌的**,filter會在file基礎上再產生乙個rdd,會作用於每個分割槽上然後得到乙個新分割槽,這些新分割槽的總和組成乙個rdd。另外乙個分割槽對應乙個task。
spark-core_包下的rdd類可以檢視運算元的定義
package org.apache.spark.rdd
分割槽依賴關係
運算元操作父rdd中的分割槽並產生子rdd和分割槽,父rdd如果不儲存就會被丟棄,一旦子rdd計算失敗就需要重新計算父rdd。spark中通過rdd之間的依賴關係來確定需要重新計算那些父rdd。
依賴關係分為兩種窄依賴(narrowdependencies)和寬依賴(wide dependencies)
窄依賴:子rdd的乙個分割槽依賴乙個或多個父rdd中的乙個分割槽
寬依賴:子rdd中的乙個分割槽依賴父rdd的兩個或多個或全部分割槽
窄依賴:重新計算時代價小,只需要計算乙個partition在一台機器上就能完成
寬依賴:重新計算時代價大,可能需要計算多個partition,而partition對應的是集群中的block,而這些block很有可能會儲存在集群的多個節點上。
所以一般需要將寬依賴的rdd進行快取
判斷寬依賴:
1一般情況下value型的運算元產生的rdd是窄依賴,key-value型的運算元產生的rdd是寬依賴。
2通過呼叫dependencies來判斷是那種分割槽依賴關係
顯示onetoone是窄依賴,反之如果顯示shuffledrdd則是寬依賴
Spark學習進度 RDD運算元
需求 資料格式如下 在 spark 中,其實最終 job3 從邏輯上的計算過程是 job3 job1.map filter,整個過程是共享記憶體的,而不需要將中間結果存放在可靠的分布式檔案系統中 線性回歸 val points sc.textfile map persist val w random...
spark筆記(一)之RDD任務劃分
一.driver executer driver 建立spark上下文物件的應用程式稱之為driver,或者驅動器 只要建立spark上下文物件的類,可以稱之為driver類 功能 傳送任務給executor進行計算 總結 除executoru運算元計算功能之外的 都屬於driver executo...
Spark之RDD的屬性
1.一組分片 partition 即資料集的基本組成單位。對於rdd來說,每個分片都會被乙個計算任務處理,並決定平行計算的粒度。使用者可以在建立rdd時指定rdd的分片個數,如果沒有指定,那麼就會採用預設值。預設值就是程式所分配到的cpu core的數目。2.乙個計算每個分割槽的函式。spark中r...