Spark 程式設計模型(上)

努力的凹凸曼發表於2018-09-13

初識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

這裡寫圖片描述

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

相關文章