溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spark2.2.0中Spark系統(tǒng)架構(gòu)及任務(wù)提交流程是怎樣的

發(fā)布時(shí)間:2021-12-16 20:32:10 來(lái)源:億速云 閱讀:120 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)Spark2.2.0中Spark系統(tǒng)架構(gòu)及任務(wù)提交流程是怎樣的,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

在講解Spark系統(tǒng)架構(gòu)之前,先給大家普及一些比較重要的概念 :

術(shù)語(yǔ)
描述
Application
Spark的應(yīng)用程序,包含一個(gè)Driver、多個(gè)Executor
SparkContxt
spark應(yīng)用程序入口,負(fù)責(zé)調(diào)度運(yùn)算資源,協(xié)調(diào)worker上的executor
Driver程序

運(yùn)行sark應(yīng)用程序的main函數(shù),并創(chuàng)建sparkContext

Executor
運(yùn)行在Worker上的一個(gè)進(jìn)行,負(fù)責(zé)運(yùn)行Task
Worker
集群中的計(jì)算節(jié)點(diǎn),運(yùn)行一個(gè)或多個(gè)Executor
Task
Worker中的一個(gè)線程,Executor中的計(jì)算單元
Job
SparkContext提交的Action操作,有幾個(gè)action就會(huì)有幾個(gè)Job,應(yīng)用程序會(huì)有一個(gè)、多個(gè)job
Stage
每個(gè)Job都會(huì)劃分為多個(gè)stage執(zhí)行,也稱TaskSet
RDD
spark的核心,分布式彈性數(shù)據(jù)集
DAGScheduler
根據(jù)Job構(gòu)建基于stage的DAG,并發(fā)送TaskScheduler執(zhí)行
TaskScheduler
提交Taskset給Woker進(jìn)行執(zhí)行,并返回執(zhí)行結(jié)果
Transformations
RDD一種轉(zhuǎn)換類型,返回值還是一個(gè)RDD,具有懶加載屬性,如果程序全是Transformation,沒有Action程序是不會(huì)執(zhí)行的。
Actions
RDD一種轉(zhuǎn)換類型,返回值也是一個(gè)RDD,程序只有Action操作才會(huì)被觸發(fā)。

Spark部署模式:

    這里簡(jiǎn)單說(shuō)一下,詳細(xì)部署請(qǐng)自行百度,這個(gè)網(wǎng)上資料很多也很全,我這里不在說(shuō)了: 

運(yùn)行

運(yùn)行

模式

描述

local

本地模式

常用于本地開發(fā)測(cè)試,本地還分為local和local-cluster

standalone

集群模式

典型的Master/Slave模式,Master存在單點(diǎn)故障的,Spark支持Zookeeper來(lái)實(shí)現(xiàn)HA

On  Yarn

集群模式

運(yùn)行在Yarn資源管理器框架上,由Yarn負(fù)責(zé)資源管理,Spark負(fù)責(zé)任務(wù)調(diào)度和計(jì)算

On Mesos

集群模式

運(yùn)行在 mesos資源管理器框架上,由mesos負(fù)責(zé)資源管理,Spark負(fù)責(zé)任務(wù)調(diào)度和計(jì)算

On  cloud

集群模式

比如AWS的EMR,使用這個(gè)模式能很方便地訪問(wèn)Amazon的S3;Spark支持多種分布式存儲(chǔ)系統(tǒng),hdfs,S3,hbase等

    Spark是一個(gè)基于內(nèi)存的分布式并行處理框架,有幾個(gè)關(guān)鍵字:分布式、基于內(nèi)存、并行處理,因此學(xué)習(xí)它要學(xué)習(xí)它的分布式架構(gòu)以及它實(shí)現(xiàn)高速并行計(jì)算的機(jī)理,下面是spark的任務(wù)執(zhí)行架構(gòu)圖,整體劃分為以下幾部分:

一、Client客戶端:負(fù)責(zé)任務(wù)的提交,執(zhí)行提交命令,指定任務(wù)MainClass、資源需求、參數(shù)配置等;在yarn/standalone-client模式下,客戶端提交程序后,Client新建一個(gè)Driver程序,這個(gè)client的作用持續(xù)到spark程序運(yùn)行完畢,而yarn/standalone-cluster模式下,客戶端提交程序后就不再發(fā)揮任何作用,也就是說(shuō)僅僅發(fā)揮了提交程序包的作用。

二、Driver:主要是對(duì)SparkContext進(jìn)行配置、初始化以及關(guān)閉。初始化SparkContext是為了構(gòu)建Spark應(yīng)用程序的運(yùn)行環(huán)境,在初始化SparkContext,要先導(dǎo)入一些Spark的類和隱式轉(zhuǎn)換;在Executor部分運(yùn)行完畢后,需要將SparkContext關(guān)閉。

三、ClusterManager:負(fù)責(zé)接收任務(wù)的請(qǐng)求,分配計(jì)算資源、完成資源調(diào)度,一般采用FIFO策略;Driver向ClusterManager提交資源申請(qǐng),ClusterManager結(jié)合任務(wù)資源需求和自身資源可用量,從Worker分配資源,并負(fù)責(zé)告知Driver資源分配結(jié)果,Driver接收到ClusterManager響應(yīng)后發(fā)送Task到Worker執(zhí)行,Worker通過(guò)心跳機(jī)制向ClusterManager匯報(bào)自己的資源和運(yùn)行情況。

四、Executor:運(yùn)行在worker節(jié)點(diǎn)上的一個(gè)進(jìn)程,該進(jìn)程負(fù)責(zé)運(yùn)行某些Task, 并且負(fù)責(zé)將數(shù)據(jù)存到內(nèi)存或磁盤上,每個(gè)Application都有各自獨(dú)立的一批Executor,在Spark on Yarn模式下,其進(jìn)程名稱為CoarseGrainedExecutor Backend。一個(gè)CoarseGrainedExecutor Backend有且僅有一個(gè)Executor對(duì)象, 負(fù)責(zé)將Task包裝成taskRunner,并從線程池中抽取一個(gè)空閑線程運(yùn)行Task, 這個(gè)每一個(gè)CoarseGrainedExecutor Backend能并行運(yùn)行Task的數(shù)量取決于分配給它的cpu個(gè)數(shù)。

Spark2.2.0中Spark系統(tǒng)架構(gòu)及任務(wù)提交流程是怎樣的

任務(wù)提交流程(這里以yarn-cluster模式講解):

    1.客戶端一般通過(guò)spark-submit方式提交作業(yè)到Y(jié)arn集群,直接去找的是ResourceManager(RM),然后RM分配一個(gè)Worker創(chuàng)建Appmaster,由AppMaster去啟動(dòng)Driver;

    2.在Driver中運(yùn)行我們提交的main函數(shù),創(chuàng)建SparkContext,根據(jù)我們的Spark代碼,并生成RDD的邏輯執(zhí)行計(jì)劃DAG,SparkContext會(huì)生成生成一批批的task,然后等待發(fā)送的Worker去執(zhí)行;

    3.AppMaster去向RM申請(qǐng)資源,RM會(huì)啟動(dòng)一批Executor,這些Executor會(huì)一直存在,等待Task任務(wù)到來(lái),執(zhí)行Task,直到整個(gè)任務(wù)結(jié)束,Executor的數(shù)量在整個(gè)任務(wù)執(zhí)行過(guò)程中是一直不變的;最后RM將資源分配信息發(fā)送給Driver端;

    4. Driver收到RM的響應(yīng)后,將任務(wù)的jar發(fā)送到對(duì)應(yīng)的Executor上去執(zhí)行,這里執(zhí)行順序是按照RDD的DAG一批批的去執(zhí)行對(duì)應(yīng)的Task;在同一Stage每個(gè)Task執(zhí)行相同的代碼,但是處理的數(shù)據(jù)是不同的(這也是RDD中分布式的特性);

注意:

    上面任務(wù)提交流程是yarn-cluster模式,這里再?gòu)?qiáng)調(diào)一次,1.standalone/yarn-client模式:Driver運(yùn)行在Client;

2.standalone/yarn-cluster模式:Driver是運(yùn)行在集群的一個(gè)Worker上。

相關(guān)知識(shí):

Spark的核心組件:包括RDD、Scheduler、Storage、Shuffle四部分:

   1.RDD是Spark最核心最精髓的部分,spark將所有數(shù)據(jù)都抽象成RDD。

   2.Scheduler是Spark的調(diào)度機(jī)制,分為DAGScheduler和TaskScheduler。

   3.Storage模塊主要管理緩存后的RDD、shuffle中間結(jié)果數(shù)據(jù)和broadcast數(shù)據(jù)。

    4.Shuffle分為Hash方式和Sort方式,兩種方式的shuffle中間數(shù)據(jù)都寫本地磁盤。

以上就是Spark2.2.0中Spark系統(tǒng)架構(gòu)及任務(wù)提交流程是怎樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI