[Spark]-RDD
1.什麽是RDD
Resilient Distributed Dataset(RDD),彈性的分布式數據集.
分布式數據集,是指數據集會以patition塊的方式,存儲在多個節點上.
彈性,體現在Spark計算過程中將數據的抽象封裝,依此帶來的各種重試機制,內存和磁盤切換,高自由的分片函數等
Hadoop的MapReduce,是基於數據集(物理)的處理,從物理存儲上加載數據,操作數據,然後寫入物理存儲設備.不適用於大量叠代(重用中間成果的IO成本太高)
Spark的RDD,是基於工作集(將數據集抽象封裝)的處理.工作集保留數據集的位置感知,自動容錯,負載均衡等優點,還具有抽象封裝所帶來的彈性,具體體現在:
自動進行內存和磁盤存儲的切換
節點的彈性:節點基於Lineage的容錯(第N個節點出錯,會嘗試從N-1個節點重新恢復數據)
Task的彈性:Task失敗會自動重試(默認4次)
Stage的彈性:Stage失敗也會進行重試,並且可以重計算失敗的數據分片或者只重計算失敗的步驟
CheckPoint和Persist
數據調度的彈性:DAG TASK和資源管理無關
數據分片的高度彈性:人工自由設置分片函數和支持Repartition
2.RDD的五大特性
RDD是由多個Partition組成的一個List
對RDD的每一個操作,都會對RDD裏的每一個Partition執行同一個操作
每一個RDD都會記錄它的依賴(方便重新計算,緩存化或者CheckPoint)
如果RDD裏存放的是Key-Value的形式.則可以傳入一個自定義的分區函數進行分區(比如自定義按Key分區,則會將不同RDD的相同Key都集中在一個Partition中)
計算就近原則.計算會盡可能的放入split所在的節點中(應該是節點集,因為有數據副本)
3.RDD的創建
RDD的創建兩種方式
3.1 從一個本地的Scala集合創建
as
3.2 從一個外部的存儲系統中創建
比如HDFS,HBase等支持任何Hadoop InputFormat的存儲系統
as
[Spark]-RDD