什么是RDD
視頻教程:
1、優酷
2、YouTube
?
RDD是個抽象類,全稱為Resilient Distributed Datasets,是一個容錯的、并行的數據結構,可以讓用戶顯式地將數據存儲到磁盤和內存中,并能控制數據的分區。同時,RDD還提供了一組豐富的操作來操作這些數據,諸如map、flatMap、filter等轉換操作,除此之外,RDD還提供了諸如join、groupBy、reduceByKey等更為方便的操作,以支持常見的數據運算。但實際上繼承RDD的派生類一般只要實現兩個方法:
1、getPartitions()用來告知怎么將input分片;
2、compute()用來輸出每個Partition被函數處理的一個單元);
?
RDD的特點:
1、它是在集群節點上的不可變的、已分區的集合對象。
2、通過并行轉換的方式來創建如(map, filter, join, etc)。
3、失敗自動重建。
4、可以控制存儲級別(內存、磁盤等)來進行重用。
5、必須是可序列化的。
6、是靜態類型的。
?
RDD的好處
1、RDD只能從持久存儲或通過Transformation操作產生,相比于分布式共享內存(DSM)可以更高效實現容錯,對于丟失部分數據分區只需根據它的lineage就可重新計算出來,而不需要做特定的Checkpoint。( RDD實現了基于Lineage的容錯機制。RDD的轉換關系,構成了compute chain,可以把這個compute chain認為是RDD之間演化的Lineage。在部分計算結果丟失時,只需要根據這個Lineage重算即可。)
2、RDD的不變性,可以實現類似Hadoop MapReduce的推測式執行。
3、RDD的數據分區特性,可以通過數據的本地性來提高性能,這與Hadoop MapReduce是一樣的。
4、RDD都是可序列化的,在內存不足時可自動降級為磁盤存儲,把RDD存儲于磁盤上,這時性能會有大的下降但不會差于現在的MapReduce。
?
RDD的存儲與分區
1、用戶可以選擇不同的存儲級別存儲RDD以便重用。
2、當前RDD默認是存儲于內存,但當內存不足時,RDD會spill到disk。
3、RDD在需要進行分區把數據分布于集群中時會根據每條記錄Key進行分區(如Hash 分區),以此保證兩個數據集在Join時能高效。
?
RDD的內部表示
在RDD的內部實現中每個RDD都可以使用5個方面的特性來表示:
1、分區列表(數據塊列表)
2、計算每個分片的函數(根據父RDD計算出此RDD)
3、對父RDD的依賴列表
4、對key-value RDD的Partitioner(可選)
5、每個數據分片的預定義地址列表(如HDFS上的數據塊的地址)(可選)
?
RDD的創建方式:
1、從Hadoop文件系統(或與Hadoop兼容的其它存儲系統)輸入(例如HDFS)創建。
2、從父RDD轉換得到新RDD。
3、通過parallelize將單機數據創建為分布式RDD。
?