1. 程式人生 > >Spark 編程模型(上)

Spark 編程模型(上)

導致 內容 val net 什麽是 元素 如果 ont cat

初識RDD

什麽是RDD?

定義:Resilient distributed datasets (RDD), an efficient, general-purpose and fault-tolerant abstraction for sharing data in cluster applications.

  RDD 是只讀的。  

   RDD 是分區記錄的集合。

   RDD 是容錯的。--- lineage RDD 是高效的。

   RDD 不需要物化。---物化:進行實際的變換並最終寫入穩定的存儲器上

  RDD 可以緩存的。---可指定緩存級別

RDD是spark的核心,也是整個spark的架構基礎,RDD是彈性分布式集合(Resilient Distributed Datasets)的簡稱,是分布式只讀且已分區集合對象。這些集合是彈性的,如果數據集一部分丟失,則可以對它們進行重建。

RDD接口

技術分享圖片

RDD的本質特征

技術分享圖片

RDD--partitions

Spark中將1~100的數組轉換為rdd。

技術分享圖片

通過第15行的size獲得rdd的partition的個數,此處創建rdd顯式指定定分區個數2,默認數值是這個程序所分配到的資源的cpu核的個數。

RDD-preferredLocations

返回此RDD的一個partition的數據塊信息,如果一個數據塊(block)有多個備份在返回所有備份的location地址信息:主機ip或域名。

作用:spark在進行任務調度室盡可能根據block的地址做到本地計算。

RDD-dependencies

RDD之間的依賴關系分為兩類:

● 窄依賴

每個父RDD的分區都至多被一個子RDD的分區使用,即為OneToOneDependecies。

● 寬依賴

多個子RDD的分區依賴一個父RDD的分區,即為ShuffleDependency 。例如,map操作是一種窄依賴,而join操作是一種寬依賴(除非父RDD已經基於Hash策略被劃分過了,co-partitioned)。

技術分享圖片

窄依賴相比寬依賴更高效資源消耗更少

  • 允許在單個集群節點上流水線式執行,這個節點可以計算所有父級分區。例如,可以逐個元素地依次執行filter操作和map操作。
  • 相反,寬依賴需要所有的父RDD數據可用並且數據已經通過類MapReduce的操作shuffle完成。

在窄依賴中,節點失敗後的恢復更加高效。

  • 因為只有丟失的父級分區需要重新計算,並且這些丟失的父級分區可以並行地在不同節點上重新計算。
  • 與此相反,在寬依賴的繼承關系中,單個失敗的節點可能導致一個RDD的所有先祖RDD中的一些分區丟失,導致計算的重新執行。

RDD-compute

分區計算:Spark對RDD的計算是以partition為最小單位的,並且都是對叠代器進行復合,不需要保存每次的計算結果。

RDD- partitioner

分區函數:目前spark中提供兩種分區函數:

  • HashPatitioner(哈希分區)
  • RangePatitioner(區域分區)

且partitioner只存在於(K,V)類型的RDD中,rdd本身決定了分區的數量。

RDD- lineage

val lines = sc.textFile("hdfs://...")
// transformed RDDs
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split("\t")).map(r => r(1))
messages.cache()
// action 1
messages.filter(_.contains("mysql")).count()
// action 2
messages.filter(_.contains("php")).count()

技術分享圖片

技術分享圖片

RDD經過trans或action後產生一個新的RDD,RDD之間的通過lineage來表達依賴關系,lineage是rdd容錯的重要機制,rdd轉換後的分區可能在轉換前分區的節點內存中。

技術分享圖片

典型RDD的特征

技術分享圖片

不同角度看RDD

技術分享圖片

Scheduler Optimizations

技術分享圖片

以上就是博主為大家介紹的這一板塊的主要內容,這都是博主自己的學習過程,希望能給大家帶來一定的指導作用,有用的還望大家點個支持,如果對你沒用也望包涵,有錯誤煩請指出。如有期待可關註博主以第一時間獲取更新哦,謝謝!

Spark 編程模型(上)