spark點點滴滴 基礎原理和基本架構

2021-07-29 16:45:06 字數 2538 閱讀 5726

spark是uc berkeley amp lab (加州大學伯克利分校的amp實驗室)所開源的類hadoop mapreduce的通用並行框架,spark,擁有hadoop mapreduce所具有的優點;但不同於mapreduce的是job中間輸出結果可以儲存在記憶體中,從而不再需要讀寫hdfs,因此spark能更好地適用於資料探勘與機器學習等需要迭代的mapreduce的演算法。

spark 主要有三個特點:

- 高階 api 剝離了對集群本身的關注,spark 應用開發者可以專注於應用所要做的計算本身。

- spark 很快,支援互動式計算和複雜演算法。

- spark 是乙個通用引擎,可用它來完成各種各樣的運算,包括 sql 查詢、文字處理、機器學習等,而在 spark 出現之前,我們一般需要學習各種各樣的引擎來分別處理這些需求。

rdd是spark中最核心的概念之一,是對資料的抽象封裝,它表示已被分片(partition),不可變的並能夠被並行操作的資料集合。

partion是彈性分布式資料集rdd的最小單元,rdd是由分布在各個節點上的partion組成的。

其中,rdd和partition在分布式環境中對應關係如圖:

圖中,rdd 1有5個partition,分布在四台節點機器上,rdd 2有3個partition,分布在三颱機器上。

在spark中,rdd是不可變的,rdd也只能通過轉換 從兩種資料來源中建立 rdd 1 )儲存中的資料讀取; 2 )其他 rdd轉換而來。同時rdd提供兩種不同型別的操作:轉換(transformation)和動作 ( action )。

這兩種不同的操作在spark的分布式計算中很重要,因為影響了spark任務的劃分。因此,在實際應用中,我們應該好好考慮選擇哪些操作。

目前,transformation包含一下一些操作:

action包含以下一些操作:

我們知道spark的任務執行是延遲執行的,即只有action動作出現的時候,spark才開始真正的執行任務,而且是將一系列任務組織成有向無環圖(dag)然後開始執行。由於rdd是唯讀的,即通過另外乙個rdd來產出,這就涉及到rdd之間的依賴關係,而rdd是劃分為多個partition分布在不同機器上,為了提高執行效率,spark將這種依賴劃分為寬依賴(wide dependency)和窄依賴(narrow dependency)。

rdd作為資料結構,本質上是乙個唯讀的分割槽記錄集合。乙個rdd可以包含多個分割槽,每個分割槽就是乙個dataset片段。rdd可以相互依賴。如果rdd的每個分割槽最多只能被乙個child rdd的乙個分割槽使用,則稱之為narrow dependency;若多個child rdd分割槽都可以依賴,則稱之為wide dependency。不同的操作依據其特性,可能會產生不同的依賴。例如map操作會產生narrow dependency,而join操作則產生wide dependency。

依賴示例入下圖:

父 rdd 的每個分割槽都只被子 rdd 的乙個分割槽所使用,例如map、filter。相應的,那麼寬依賴就是指父 rdd 的分割槽被多個子 rdd 的分割槽所依賴,例如groupbykey、reducebykey等操作。如果父rdd的乙個partition被乙個子rdd的partition所使用就是窄依賴,否則的話就是寬依賴。

spark將依賴劃分為寬依賴和窄依賴原因可以理解有兩點:

1.執行效率,窄依賴可在同乙個集群節點上執行,減少了節點間資料傳輸消耗,並且可以平行計算。

2.故障恢復,narrow dependency的失敗恢復更有效,因為它只需要重新計算丟失的分割槽即可。

同樣,spark也是以寬依賴和窄依賴為分界點來劃分stage的,比如下圖就是劃分為三個stage:

我們知道,spark有三種執行模式,standalone模式,mesos模式和基於yarn的模式。

由於基於yarn模式的spark是我們最常使用的,因此我們介紹下基於yarn模式的spark提交任務的執行架構。

首先看執行架構圖:

具體的模式網上有很多,大家可以自己看看。

【參考資料】spark架構與作業執行流程簡介

【參考資料】spark rdd使用詳解1–rdd原理

【參考資料】spark核心研究

【參考資料】spark on yarn兩種執行模式介紹

《點點滴滴》Spark的排程模組和Spark容錯

spark的排程模組分 dagscheduler和taskscheduler。一 dagscheduler模組 主要負責分析使用者提交的應用,並根據計算任務的依賴關係建立dag,然後將dag劃分為不同的stage 階段 其中每乙個stage都是由可以併發的一組task組成,每乙個階段的task執行邏...

acm 點點滴滴

qsort排序方法 六種qsort排序方法 本文中排序都是採用的從小到大排序 一 對int型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char型別陣列排序 ...

sizeof 點點滴滴

1.靜態變數是存放在全域性資料區中的,sizeof計算棧中分配的大小,所以類或結構體中的靜態變數時不會計算在sizeof內的!2.sizeof和strlen的區別 1 sizeof操作符的結果型別是size t,它在標頭檔案中的typedef為unsigned int型別。該型別保證能容納實現所建立...