Spark RDD

At a high level, every Spark application consists of a driver program that runs the user’s main function and executes various parallel operations on a cluster. 

來自 <http://spark.apache.org/docs/latest/rdd-programming-guide.html>

提供兩個抽象,第一個抽象是RDD,第二個是共享變量

一、RDD彈性分佈式數據集

分佈式數據架構,即 rDD,Spark的核心數據結構。

RDD 的三種種創建方式:

1、來自內存中的對象集合(也稱爲並行化的一個集合)sc.parallize(data)data可以是一個Array

2、從Hadoop文件系統(或與Hadoop兼容的其他持久化存儲系統,如Hive、

Cassandra、 Hbase)輸入(如HDFS)創建

3、從父RDD轉換得到新的RDD

第一種方法用於對少量的輸入數據進行並行的CPU密集型計算。

第二種方法是創建一個對外部數據集的引用,sc.textFile(),括號裏的路徑可以是任何Hadoop文件系統的路徑。

第三種方法,從已有的RDD進行轉換,Transformation,轉換是惰性的。

轉換常用的操作有:映射、分組、聚合、重新分區、採樣、連接RDD以及把RDD作爲集合處理

持久化:.cache()標記需要緩存的中間結果,並不會立即緩存RDD

序列化:一般用Java序列化機制,spark中採用Kryo序列化機制。要使用它需要在conf中設置spark.serializer的屬性

 

共享變量:廣播變量和累加器

RDD的兩種操作算子

變換(Transformation)和動作(Action)

變換操作是延時執行的,從一個RDD轉換生成另一個RDD的操作不是馬上執行,而是要等到有Action操作時才觸發。

Action算子會觸發spark作業提交,並將數據輸出到spark系統。

RDD 的內部屬性。

1、分區列表

2、計算每個分片的函數

3、對父RDD的依賴列表

4、對Key-Value對數據類型RDD的分區器,控制分區策略和分區數。

5、每個數據分區的地址列表(如HDFS上的數據塊的地址)。

 

Spark數據存儲的核心是RDD,RDD可以被理解爲一個抽象的數組,但這個數組是分佈在集羣上的,邏輯上RDD的每個分區叫一個Partition。經歷每一次Transformation操作之後,就會將RDD轉換成另一個新的RDD

本質上RDD 是數據的元數據結構,存儲的是數據分區及其邏輯結構映射關係,存儲rdd之前的依賴轉換關係。實際的物理塊block是由blockManager進行管理的。

Spark算子分類,在程序運行過程中通過算子對RDD進行轉換。

1、spark算子的作用:算子是RDD中定義的函數。包括輸入函數、運行轉換函數、輸出函數,每一步操作都可以認爲是一個算子。

輸入:如textFile從文件讀取、parallellize方法輸入scala集合或數據輸入spark,數據進入spark後轉換爲spark數據塊,通過blockmanager進行管理

運行:輸入spark形成RDD後就可以通過變換算子,如filter、map等轉換爲新的RDD。如果數據需要複用,就可以通過cache()將數據緩存到內存。

輸出:saveAsTextFile輸出到HDFS或collect()操作輸出scala集合,count()直接返回。

RDD是個抽象類,具體實現由其子類如MappedRDD、ShuffledRDD等。

2spark算子的分類:

三類:value型的transformation算子、key-value型的transformation算子、Action算子,會觸發SparkContext提交Job作業。

第一類:又可以分爲五種:

如map(),實現子類MappedRDD的方法。flatmap(),與map類似

mapPartitions、glom。這些都是輸入輸出一對一型

union、cartesian笛卡爾積。這些是輸入與輸出多對一型

groupBy 輸入與輸出多對多

filter、distinct、substract(集合的差操作)、sample、takeSample輸出爲輸入的子集

cache、persist Cache類型

 

第二類:Key-Value型的

三種類型:輸入分區與輸出分區一對一如mapValues(只對值進行map操作)

對單個RDD或兩個RDD聚集:單個如combineByKey、reduceByKey、partitonBy

對兩個rdd聚集:如cogroup

連接 join、LeftOutJoin、rightOutJoin

第三類:Actions算子

分類:無輸出、HDFSscala集合、數據類型

foreach、saveAsTextFile、saveAsObjectFile、collect、collectAsMap、reduceByKeyLocally、lookup、count、top、reduce、fold、aggregate

Spark作業的運行機制:driver和executor

兩種類型的任務,shffle map和result,除了結果計算的最終階段外,其他任務都算作shfflemap 任務。

當對RDD執行一個動作時,會自動提交一個spark作業,導致sparkcontext調用runJob,然後調用傳遞給作爲driver的一部分運行的調度程序。。調度程序由DAG調度程序和任務調度程序組成。DAG把作業分解爲若干階段,這些階段構成一個DAG;任務調度程序則把每個階段的任務提交到集羣。

 

二、共享變量

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章