Spark 程式設計模型(上)
初識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學習之-----spark程式設計模型Spark程式設計模型
- spark架構設計&程式設計模型01Spark架構程式設計模型
- RDD程式設計 上(Spark自學三)程式設計Spark
- Spark修煉之道(進階篇)——Spark入門到精通:第四節 Spark程式設計模型(一)Spark程式設計模型
- Spark修煉之道(進階篇)——Spark入門到精通:第五節 Spark程式設計模型(二)Spark程式設計模型
- Spark修煉之道(進階篇)——Spark入門到精通:第六節 Spark程式設計模型(三)Spark程式設計模型
- Spark—GraphX程式設計指南Spark程式設計
- Socket程式設計模型程式設計模型
- RDD程式設計 下(Spark自學四)程式設計Spark
- Spark開發-RDD介面程式設計Spark程式設計
- 程式設計師程式設計能力層次模型程式設計師模型
- 文件庫程式設計模型程式設計模型
- EJB 程式設計模型 (轉)程式設計模型
- spark學習筆記--進階程式設計Spark筆記程式設計
- MapReduce 程式設計模型 & WordCount 示例程式設計模型
- Nio程式設計模型總結程式設計模型
- 併發程式設計---JMM模型程式設計模型
- 網路程式設計-OSI模型程式設計模型
- cuda程式設計與gpu平行計算(四):cuda程式設計模型程式設計GPU模型
- mapreduce的程式設計模型,計數器程式設計模型
- Spark程式設計環境搭建及WordCount例項Spark程式設計
- 網路程式設計(上)程式設計
- 在馬桶上程式設計程式設計
- 蹲在馬桶上程式設計程式設計
- 戀上shell程式設計程式設計
- 併發程式設計模型小結程式設計模型
- 網路程式設計之IO模型程式設計模型
- 非同步程式設計模型的思考非同步程式設計模型
- 系統程式設計 - I/O模型程式設計模型
- JVM併發程式設計模型覽JVM程式設計模型
- socket程式設計的select模型程式設計模型
- TCP/IP網路程式設計模型TCP程式設計模型
- Spark SQL 程式設計API入門系列之Spark SQL的作用與使用方式SparkSQL程式設計API
- Java網路程式設計和NIO詳解3:IO模型與Java網路程式設計模型Java程式設計模型
- 好程式設計師解密Spark是否可以替代hadoop程式設計師解密SparkHadoop
- Spark機器學習1·程式設計入門(scala/java/python)Spark機器學習程式設計JavaPython
- 模型驅動設計的構造塊(上)——DDD模型
- 類程式設計的WAF(上)程式設計