前言:Spark編程模型兩個主要抽象,一個是彈性分散式數據集RDD,它是一種特殊集合,支持多種數據源,可支持並行計算,可緩存;另一個是兩種共用變數,支持並行計算的廣播變數和累加器。 1.RDD介紹 Spark大數據處理平臺建立在RDD之上,RDD是Spark的核心概念,最主要的抽象之一。RDD和Sp ...
前言:Spark編程模型兩個主要抽象,一個是彈性分散式數據集RDD,它是一種特殊集合,支持多種數據源,可支持並行計算,可緩存;另一個是兩種共用變數,支持並行計算的廣播變數和累加器。
1.RDD介紹
Spark大數據處理平臺建立在RDD之上,RDD是Spark的核心概念,最主要的抽象之一。RDD和Spark之間的關係是,RDD是一種基於記憶體的具有容錯性的集群抽象方法,Spark是這個抽象方法的實現。
RDD(Resilient Distributed Dataset)叫做彈性分散式數據集,是Spark中最基本的數據抽象,它代表一個不可變、可分區、裡面的元素可並行計算的集合。RDD具有數據流模型的特點:自動容錯、位置感知性調度和可伸縮性。RDD允許用戶在執行多個查詢時顯式地將工作集緩存在記憶體中,後續的查詢能夠重用工作集,這極大地提升了查詢速度。
1.1 RDD的特征
(1)分區(Partition):一個數據分片列表。能夠將數據切分,切分好的數據能夠進行並行計算,是數據集的原子組成部分。用戶可以在創建RDD時指定RDD的分片個數,如果沒有指定,那麼就會採用預設值。預設值就是程式所分配到的CPU Core的數目。
(2)函數(Compute):一個計算RDD每個分片的函數。RDD的計算是以分片為單位的,每個RDD都會實現compute函數以達到這個目的。compute函數會對迭代器進行複合,不需要保存每次計算的結果。
(3)依賴(Dependency):RDD的每次轉換都會生成一個新的RDD,所以RDD之間就會形成類似於流水線一樣的前後依賴關係。在部分分區數據丟失時,Spark可以通過這個依賴關係重新計算丟失的分區數據,而不是對RDD的所有分區進行重新計算。
(4)優先位置(可選):一個列表,存儲存取每個Partition的優先位置(preferred location)。對於一個HDFS文件來說,這個列表保存的就是每個Partition所在的塊的位置。按照“移動數據不如移動計算”的理念,Spark在進行任務調度的時候,會儘可能地將計算任務分配到其所要處理數據塊的存儲位置。
(5)分區策略(可選):一個Partitioner,即RDD的分片函數,描述分區的模式和數據存放的位置。當前Spark中實現了兩種類型的分片函數,一個是基於哈希的HashPartitioner,另外一個是基於範圍的RangePartitioner。只有對於於key-value的RDD,才會有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函數不但決定了RDD本身的分片數量,也決定了parent RDD Shuffle輸出時的分片數量。
常見的RDD有很多種,每個Transformation操作都會產生一種RDD,一下是各種RDD特征比較。
1.2 RDD依賴