參考博文:
apache spark 是專為大規模資料處理而設計的快速通用的計算引擎。
hadoop雖然已成為大資料技術的事實標準,但其本身還存在諸多缺陷,最主要的缺陷是其mapreduce計算模型延遲過高,無法勝任實時、快速計算的需求,因而只適用於離線批處理的應用場景。
磁碟io開銷大。每次執行時都需要從磁碟讀取資料,並且在計算完成後需要將中間結果寫入到磁碟中,io開銷較大;
延遲高。一次計算可能需要分解成一系列按順序執行的mapreduce任務,任務之間的銜接由於涉及到io開銷,會產生較高延遲。而且,在前乙個任務執行完成之前,其他任務無法開始,難以勝任複雜、多階段的計算任務。
spark主要具有如下優點:
spark的計算模式也屬於mapreduce,但不侷限於map和reduce操作,還提供了多種資料集操作型別,程式設計模型比mapreduce更靈活;
spark提供了記憶體計算,中間結果直接放到記憶體中,帶來了更高的迭代運算效率;
spark基於dag的任務排程執行機制,要優於mapreduce的迭代執行機制。
spark最大的特點就是將計算資料、中間結果都儲存在記憶體中,大大減少了io開銷
spark提供了多種高層次、簡潔的api,通常情況下,對於實現相同功能的應用程式,spark的**量要比hadoop少2-5倍。
但spark並不能完全替代hadoop,主要用於替代hadoop中的mapreduce計算模型。實際上,spark已經很好地融入了hadoop生態圈,並成為其中的重要一員,它可以借助於yarn實現資源排程管理,借助於hdfs實現分布式儲存。
spark幾個重要的概念:
以wordcount為例(scala版本):
reducebykey() 會建立shuffledrdd,在shuffle階段會有區域性聚合和全域性聚合兩個步驟,區域性聚合後會將中間結果儲存在磁碟中,而全域性聚合之前需要將中間結果讀取出來再進行操作。
shuffle是切分stage的依據,圖中的橙色線切分兩個stage。因為有兩個分割槽所以stage1和stage2會各生成兩個task(乙個分割槽乙個task),一共4個task,乙個task包含多個rdd及作用於相應rdd上的各種操作
四個步驟
構建dag:呼叫rdd上的方法
切分stage:
dagscheduler:將乙個dag切分成一到多個stage,dagscheduler切分的依據是shuffle(寬依賴);
先提交前面的stage,執行完後再提交後面的stage;
stage會生成task,乙個stage會生成很多業務邏輯相同的task,然後stage中生成的task以taskset的形式給taskscheduler
排程task:taskscheduler排程task,將task序列化,根據資源情況將task排程到相應的executor中
執行task:executor接收task,先將task反序列化,然後將task用乙個實現了runnable介面的實現類包裝起來,然後將該包裝類丟入到執行緒池中,包裝類的run方法就會被執行,進而呼叫task的計算邏輯
為什麼要切分stage?
寬依賴:父rdd的乙個分割槽的資料給了子rdd的多個分割槽,即使存在這種可能,也是寬依賴(有shuffle階段的,例如groupbykey)
Spark執行流程
四個步驟 1.構建dag 呼叫rdd上的運算元 2.dagscheduler將dag切分stage 切分的依據是shuffle 將stage中生成的task以taskset的形式給taskscheduler 3.taskscheduler排程task 根據資源情況將task排程到相應的executo...
Spark執行流程概述
cluster manager 在hadoop yarn上主要是指resourcemanager stage 每個job會被劃分為很多組task,作為乙個taskset,名為stage.stage的劃分和排程由dagscheduler負責。stage有非最終的stage shuffle map st...
Spark架構與執行流程
1.闡述hadoop生態系統中,hdfs,mapreduce,yarn,hbase及spark的相互關係。2.spark已打造出結構一體化 功能多樣化的大資料生態系統,請簡述spark生態系統。3.用 描述你所理解的spark執行架構,執行流程。4.軟體平台準備 linux hadoop。1.had...