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—GraphX程式設計指南Spark程式設計
- Socket程式設計模型程式設計模型
- spark學習筆記--進階程式設計Spark筆記程式設計
- cuda程式設計與gpu平行計算(四):cuda程式設計模型程式設計GPU模型
- MapReduce 程式設計模型 & WordCount 示例程式設計模型
- 併發程式設計---JMM模型程式設計模型
- Nio程式設計模型總結程式設計模型
- 網路程式設計-OSI模型程式設計模型
- mapreduce的程式設計模型,計數器程式設計模型
- Spark程式設計環境搭建及WordCount例項Spark程式設計
- 好程式設計師解密Spark是否可以替代hadoop程式設計師解密SparkHadoop
- 併發程式設計模型小結程式設計模型
- 網路程式設計之IO模型程式設計模型
- 系統程式設計 - I/O模型程式設計模型
- 非同步程式設計模型的思考非同步程式設計模型
- Java網路程式設計和NIO詳解3:IO模型與Java網路程式設計模型Java程式設計模型
- Linux網路程式設計之IO模型Linux程式設計模型
- WebGL程式設計指南(7)層次模型Web程式設計模型
- GPU程式設計--OpenCL四大模型GPU程式設計大模型
- 網路程式設計-Netty-Reactor模型程式設計NettyReact模型
- 併發程式設計——IO模型詳解程式設計模型
- 程式設計模型(正規化)小結程式設計模型
- 10倍程式設計師的思考模型程式設計師模型
- 類程式設計的WAF(上)程式設計
- SAP Cloud Application Programming 程式設計模型(CAP)的設計準則CloudAPP程式設計模型
- 模型驅動設計的構造塊(上)——DDD模型
- 老程式設計師被新程式設計師拍在沙灘上?程式設計師
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark
- Javascript中常見的非同步程式設計模型JavaScript非同步程式設計模型
- 伺服器端程式設計之 IO 模型伺服器程式設計模型
- 序列模型第一週程式設計練習模型程式設計
- NVIDIA CUDA 程式設計模型之Grid和Block程式設計模型BloC
- SAP ABAP 平臺新的程式設計模型程式設計模型
- PySpark和SparkSQL基礎:如何利用Python程式設計執行Spark(附程式碼)SparkSQLPython程式設計
- 好程式設計師大資料教程:SparkShell和IDEA中編寫Spark程式程式設計師大資料SparkIdea
- 併發程式設計基礎(上)程式設計
- spark執行原理、模型Spark模型
- 非同步程式設計:.NET 4.5 基於任務的非同步程式設計模型(TAP)非同步程式設計模型