2.spark基本概念
Application
用戶編寫的Spark應用程序。Application的main方法為應用程序的入口,用戶通過Spark的API,定義了RDD和對RDD的操作。
Job
?提供給Spark運行的作業,一個Application中以Action為劃分邊界往往會產生多個Job。Spark采用惰性機制,對RDD的創建和轉換並不會立即執行,只有在遇到Action時才會生成一個Job,然後統一調度執行。
Stage
每個Job以Shuffle為邊界劃分出的不同階段, 其名稱為Stage。Stage有非最終的Stage(Shuffle Map Stage)和最終的Stage(Result Stage)兩種。
在對Job中的所有操作劃分Stage時,一般會按照倒序進行:即從Action開始,遇到窄依賴操作,則劃分到同一個執行階段;遇到寬依賴操作,則劃分一個新的執行階段,且新的階段為之前階段的parent,然後依次類推遞歸執行。child Stage需要等待所有的parent Stage執行完之後才可以執行,這時Stage之間根據依賴關系構成了一個大粒度的DAG。在一個Stage內,所有的操作以串行的Pipeline的方式,由一組Task完成計算。
Task
真正執行的工作單元,對一個Stage之內的RDD進行串行操作的計算任務。多個Task組成一個Stage。
Task分為ShuffleMapTask和ResultTask兩種,位於最後一個Stage的Task為ResultTask,其他階段的屬於ShuffleMapTask。
Cluster Manager
在集群上獲取資源的外部服務。Cluster Manager可以為自帶的Standalone、或第三方的Yarn和Mesos。
Cluster Manager一般采用Master-Slave結構。以Yarn為例,部署ResourceManager服務的節點為Master,負責集群中所有計算資源的統一管理和分配;部署NodeManager服務的節點為Slave,負責在當前節點創建一個或多個具備獨立計算能力的JVM實例,在Spark中,這些節點也叫做Worker。
Executor
某個Application運行在worker節點上的一個進程,? 該進程負責運行某些Task,並將結果返回給Driver,同時為需要緩存的RDD提供存儲功能。
Driver
準備Spark應用程序的運行環境,負責執行用戶Application中的main方法,提交Job,並將Job轉化為Task,在各個Executor進程間協調Task的調度。
Spark有Client和Cluster兩種部署模式。Application以Client模式部署時,Driver運行於Client節點;而以Cluster模式部署時,Driver運行於Worker節點,與Executor一樣由Cluster Manager啟動。
DAGScheduler
根據Job構建DAG圖,將Job拆分成多個Stage並提交給TaskScheduler。
TaskScheduler
將Stage拆分成多個Task並提交給worker運行,Executor運行什麽Task就是在此處分配的。
2.spark基本概念