Spark第一天的小概念

1、什麼是RDD

RDD(Resilient Distributed Dataset)叫做彈性分佈式數據集,是Spark中最基本的數據抽象,它代表一個不可變、可分區、裏面的元素可並行計算的集合.

Dataset:一個數據集,簡單的理解爲集合,用於存放數據的
Distributed:它的數據分佈式存儲,並且可以做分佈式的計算
Resilient:彈性的
它表示的是數據可以保存在磁盤,也可以保存在內存中

2、RDD的五大特性(源碼註釋)

  • A list of partitions
    每個RDD都有一個分區列表
  • A function for computing each split
    作用在每個分區上面的函數
  • A list of dependencies on other RDDs
    一個RDD依賴其他多個RDD,這個特性很重要,rdd的容錯機制就是根據這個特性而來的
  • Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
    可選項:針對於 kv 鍵值對的RDD才具有該分區特性
  • Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
    可選項 : 數據本地性,數據最優,選擇儘量存儲在worker節點上的數據節點。

3、創建rdd方式

1、通過已經存在的集合
val rdd1=sc.parallelize(Array(1,2,3,4))
2、讀取外部數據源
val rdd2=sc.textFile(“文件”)
3、由一個rdd轉化成一個新的RDD
val rdd3=rdd2.flatMap
4、有時也會用sc.makeRDD,使用較少

4、RDD的算子分類

transformation :轉換操作,將一個rdd轉換生成一個新的rdd(flatMap/map/reduceByKey),它屬於懶加載,延遲執行,並不會立即觸發任務的執行。
action : 此時纔會真正的觸發任務的計算。

5、rdd中的2種依賴關係

窄依賴:每個父RDD的partition最多隻被子rdd的一個partition依賴
在這裏插入圖片描述
寬依賴:每個父RDD的partition會被多個子rdd依賴,子RDD分區通常對應父RDD所有分區
在這裏插入圖片描述

6、lineage(血統)

它會記錄下當前作用在rdd上的分區數據(元數據)和一系列的轉換行爲,當子rdd中某個分區數據丟失之後,只需要通過血統來重新計算恢復當前丟失數據的分區(spark 具備容錯機制)

7、RDD的緩存方式

cache:直接將rdd中的數據,保存在內存中,其本質是persist(StorageLevel.MEMOEY_ONLY)
persist:可以有豐富的緩存級別
當rdd設置了緩存之後,如果下面有需要用到該RDD的數據的時候,就不要重複計算,可以直接從緩存中獲取得到。

8、checkpoint

會對數據進行一個持久化操作,保存在hdfs
使用的時候:
需要sc.setCheckpointdir 來設置一個檢查點目錄
對需要緩存的rdd調用checkpoint
注意:同樣在執行數據緩存的時候,需要有對應的action算子操作,纔會真正觸發持久化操作。
在做checkpoint操作的時候,此時會先執行對應觸發action算子的rdd結果,計算完成之後又會開闢一個新的job來計算你設置了checkpoint的rdd的結果。
在設置了checkpoint之後,對應這個rdd會改變之前的依賴關係,如果當前數據丟失了,只有重頭計算得到。

如何使用checkpoint

可以對要做checkPoint的rdd,先進行一個cache
在做一個checkpint操作
數據恢復的一般順序

內存———->checkpoint————>重新計算得到

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