spark的一些難以理解的概念和一些知識點的解讀(高頻考點!!)(Unit1)

這篇文章是對於還沒有入門和剛剛入門的spark小白提的,大佬可以給出意見,本人接受!!!偷笑

關於RDD部分,首先你要知道什麼什麼RDD

RDD字面意思就是彈性分佈式數據集。。。。。。。(百度一下都是這種字眼很讓人反感)

個人感覺應該要分開理解

1。彈性

 

            1. RDD可以在內存和磁盤之間手動或自動切換(後續會仔細講解)

            2. RDD可以通過轉換成其他的RDD,即血統(就是轉換操作一些算子)

 

            3. RDD可以存儲任意類型的數據(不僅是文本數據還可以是音頻視頻等。。)

            4.RDD持久化方式非常多種多樣,而且RDD本身就很聰明

這就叫彈性就是什麼數據都能玩,而且是想怎麼玩就怎麼玩!!!

2。分佈式:

        1.數據可以分散在好幾個機器上

        2.,一個RDD好幾個分區

3數據集

        1.初代RDD: 處於血統的頂層,存儲的是任務所需的數據的分區信息,還有單個分區數據讀取的方法,沒有依賴的RDD, 因爲它就是依賴的開始。

        2.子代RDD: 處於血統的下層, 存儲的東西就是 初代RDD到底幹了什麼纔會產生自己,還有就是初代RDD的引用

這就本人眼裏的RDD它是看不見摸不到的!!!

 

什麼是寬依賴什麼是窄依賴

窄依賴:多對一或者一對一

寬依賴:一對多或者多對多

rdd在進行寬依賴的時候,spark會將中間結果物化到父分區的節點上,可以簡化數據恢復的過程,這句話的意思你可以覺得一旦出現寬依賴spark會將一些dataset進行持久化以方便spark運行,這樣的好處就是能夠極小程度的降低磁盤IO

調度階段個數等於寬依賴出現次數

 

對於失敗的任務只要對應的父調度階段信息可用,那麼會到其他節點上繼續執行,有時候作業執行緩慢系統會在其他節點上執行該任務的副本,先取得結果的結果作爲最終結果

rdd三種持久化策略:
1.未序列化的java對象存在內存中   (最優可以直接訪問jvm內存裏賣弄的RDD對象)
2.序列化的數據存在於內存裏面   (比第一種有效但是降低了性能)
3.序列化的數據存在於磁盤   (通常用於RDD數據較大的情況)

最後就是:Transformation   Action

Transformation:代表的是轉化操作就是我們的計算流程,返回是RDD[T],可以是一個鏈式的轉化,並且是延遲觸發的。

map
filter
flatMap
mapPartitions
mapPartitionsWithIndex
sample
union
intersection
distinct
groupByKey
reduceByKey
aggregateByKey
sortByKey
join
cogroup
cartesian
pipe
coalesce
repartition
repartitionAndSortWithinPartitions

Action:代表是一個具體的行爲,返回的值非RDD類型,可以一個object,或者是一個數值,也可以爲Unit代表無返回值,並且action會立即觸發job的執行。

reduce
collect
count
first
take
takeSample
takeOrdered
saveAsTextFile
saveAsSequenceFile
saveAsObjectFile
countByKey
foreach


 

 

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