学习笔记Spark(三)—— Spark架构及原理(spark架构、spark RDD)
一、Spark架構
1.1、基本組件
Cluster Manager
在standalone模式中即為Master主節點,控制整個集群,監控worker。在YARN模式中為資源管理器。
Worker
從節點,負責控制計算節點,啟動Executor或者Driver。在YARN模式中為NodeManager,負責計算節點的控制。
Driver
運行Application的main()函數并創建SparkContext。
Executor
執行器,在worker node上執行任務的組件、用于啟動線程池運行任務。每個Application擁有獨立的一組Executor。
SparkContext
整個應用的上下文,控制應用的生命周期,主要包括:
RDD Objects(RDD DAG):構建DAG圖;
DAG Scheduler:根據作業(task)構建基于Stage的DAG,并提交Stage給TaskSchedule;
TaskScheduler:將任務(task)分發給Executor執行。
1.2、Standalone模式運行流程
Client:客戶端,負責提交Application應用程序
Application:用戶編寫的Spark應用程序,包含一個Driver功能的代碼
Driver:運行Application代碼里的main函數并創建SparkContext
SparkContext:應用上下文,控制整個生命周期。負責和Master通信,進行資源申請、分配任務等。
1、SparkContext向Master注冊并申請資源
2、Master接收到SparkContext的資源申請要求,根據Worker的心跳周期內的報告信息決定在哪個Worker上分配資源
3、Worker獲取到資源后,啟動Executor,Executor啟動后向SparkContext注冊并申請分配任務
4、SparkContext接收到Executor的任務申請后,SparkContext將Application代碼發送給Executor并自身解析Application代碼構建RDD DAG圖,DAGScheduler將DAG劃分成一個或多個Stage,Stage根據Partition個數分成一個多個Task并形成TaskSet同時發送給TaskScheduler。TaskScheduler將Task分配到相應的Worker,最后提交給Executor執行。
5、Executor接收到Task之后運行Task并SparkContext匯報任務狀態和進度,直到Task運行完成
所有Task運行完成后,SparkContext向Master注銷,釋放資源
1.3、Spark on YARN
1.3.1、yarn-cluster運行流程
在集群模式下,Driver運行在Application Master上,Application Master進程同時負責驅動Application和從YARN中申請資源,該進程運行在YARN container內,所以啟動Application Master的Client可以立即關閉而不必持續到Application的聲明周期。圖 1?18是YARN集群模式的作業運行流程,流程描述如下:
- 客戶端生成作業信息提交給ResourceManager。
- ResourceManager在某一個NodeManager(由YARN決定)啟動container并將Application Master分配給該NodeManager。
- NodeManager接收到ResourceManager的分配,啟動Application Master并初始化作業,此時NodeManager就稱為Driver。
- Application向ResourceManager申請資源,分配資源同時通知其他NodeManager啟動相應的Executor。
- Executor向NodeManager上的Application Master注冊匯報并完成相應的任務。
1.3.2、yarn-client運行流程
YARN客戶端模式的作業運行流程。Application Master僅僅從YARN中申請資源給Executor,之后Client會跟container通信進行作業的調度。YARN-Client模式的作業運行流程描述如下:
- 客戶端生成作業信息提交給ResourceManager。
- ResourceManager在本地NodeManager啟動Container并將Application Master分配給該NodeManager。
- NodeManager接收到ResourceManager的分配,啟動Application Master并初始化作業,此時這個NodeManager就稱為Driver。
- Application向ResourceManager申請資源,分配資源同時通知其他NodeManager啟動相應的Executor。
- Executor向本地啟動的Application Master注冊匯報并完成相應的任務。
二、Spark RDD
2.1、RDD簡介
RDD(Resilient Distributed Datasets彈性分布式數據集),可以簡單的把RDD理解成一個提供了許多操作接口的數據集合,和一般數據集不同的是,其實際數據分布存儲于一批機器中(內存或磁盤中)
RDD最重要的特性就是,提供了容錯性,可以自動從節點失敗中恢復過來。即如果某個節點上的RDD partition,因為節點故障,導致數據丟了,那么RDD會自動通過自己的數據來源重新計算該partition。
RDD的數據默認情況下存放在內存中的,但是在內存資源不足時,Spark會自動將RDD數據寫入磁盤。(彈性)
2.2、RDD 特點
- 它是集群節點上的不可改變的、已分區的集合對象;
- 通過并行轉換的方式來創建如(map、filter、join等);
- 失敗自動重建;
- 可以控制存儲級別(內存、磁盤等)來進行重用;
- 必須是可序列化的;在內存不足時可自動降級為磁盤存儲,把RDD存儲于磁盤上,這時性能有大的下降但不會差于現在的MapReduce;
- 對于丟失部分數據分區只需要根據它的lineage就可重新計算出來,而不需要做特定的checkpoint;
注意:
① RDD一旦創建就不可更改
② 重建不是從最開始的點來重建的,可以是上一步開始重建
2.3、算子
(了解)
轉換(Transformations)(如:map、Filter、groupby、join等),Transformations操作是Lazy的,也就是說從一個RDD轉換生成另一個RDD的操作不是馬上執行,spark在遇到Transformations操作時只會記錄需要這樣的操作,并不會去執行,需要等到有Actions操作的時候才會真正啟動計算過程進行計算
操作(Actions)(如:count、collect、save等),Actions操作會返回結果或把RDD數據寫到存儲系統中。Actions是觸發Spark啟動計劃的動因。
2.4、寬依賴與窄依賴
窄依賴:表現為一個父RDD的分區對應于一個子RDD的分區或者多個父RDD的分區對應于一個子RDD的分區。
寬依賴:表現為存在一個父RDD的一個分區對應一個子RDD的多個分區。
圖中的每個小方格代表一個分區,而一個大方格(比如包含3個或2個小方格的大方格)代表一個RDD,豎線左邊顯示的是窄依賴,而右邊是寬依賴。
要知道寬窄依賴的區別,那么先要了解父RDD(Parent RDD)和子RDD(Child RDD)。在上圖中,“map,filter”左上面的是父RDD,而右上面的是子RDD。“union”左上面的兩個RDD都是其右上面的RDD的父RDD,所以它是有兩個父RDD的。
總結
以上是生活随笔為你收集整理的学习笔记Spark(三)—— Spark架构及原理(spark架构、spark RDD)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记Spark(二)—— Spark
- 下一篇: 学习笔记Spark(四)—— Spark