首頁技術(shù)文章正文

執(zhí)行Spark應(yīng)用架構(gòu)需要經(jīng)歷哪幾個階段?

更新時間:2022-09-26 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

將程序切換到【Executors】Tab頁面時,我們可以看到Spark Application運行到集群上時,由兩部分組成:Driver Program和Executors。

從圖中可以看到Spark Application運行到集群上時,由兩部分組成:Driver Program和Executors。

第一、Driver Program

        相當(dāng)于AppMaster,整個應(yīng)用管理者,負(fù)責(zé)應(yīng)用中所有Job的調(diào)度執(zhí)行;

        運行JVM Process,運行程序的MAIN函數(shù),必須創(chuàng)建SparkContext上下文對象;

        一個SparkApplication僅有一個;

第二、Executors

        相當(dāng)于一個線程池,運行JVM Process,其中有很多線程,每個線程運行一個Task任務(wù),一個Task任務(wù)運行需要1 Core CPU,所有可以認(rèn)為Executor中線程數(shù)就等于CPU Core核數(shù);

        一個Spark Application可以有多個,可以設(shè)置個數(shù)和資源信息;

用戶程序從最開始的提交到最終的計算執(zhí)行,需要經(jīng)歷以下幾個階段

 1)、用戶程序創(chuàng)建 SparkContext 時,新創(chuàng)建的 SparkContext 實例會連接到 ClusterManager。 Cluster Manager 會根據(jù)用戶提交時設(shè)置的 CPU 和內(nèi)存等信息為本次提交分配計算資源,啟動 Executor。

 2)、Driver會將用戶程序劃分為不同的執(zhí)行階段Stage,每個執(zhí)行階段Stage由一組完全相同Task組成,這些Task分別作用于待處理數(shù)據(jù)的不同分區(qū)。在階段劃分完成和Task創(chuàng)建后, Driver會向Executor發(fā)送 Task;

 3)、Executor在接收到Task后,會下載Task的運行時依賴,在準(zhǔn)備好Task的執(zhí)行環(huán)境后,會開始執(zhí)行Task,并且將Task的運行狀態(tài)匯報給Driver;

 4)、Driver會根據(jù)收到的Task的運行狀態(tài)來處理不同的狀態(tài)更新。 Task分為兩種:一種是Shuffle Map Task,它實現(xiàn)數(shù)據(jù)的重新

洗牌,洗牌的結(jié)果保存到Executor 所在節(jié)點的文件系統(tǒng)中;另外一種是Result Task,它負(fù)責(zé)生成結(jié)果數(shù)據(jù);

 5)、Driver 會不斷地調(diào)用Task,將Task發(fā)送到Executor執(zhí)行,在所有的Task 都正確執(zhí)行或者超過執(zhí)行次數(shù)的限制仍然沒有執(zhí)行成功時停止;

4040、8080、18080的區(qū)別

4040: 是一個運行的Application在運行的過程中臨時綁定的端口,用以查看當(dāng)前任務(wù)的狀態(tài).4040被占用會順延到4041.4042等。

4040是一個臨時端口,當(dāng)前程序運行完成后, 4040就會被注銷哦。

8080: 默認(rèn)是StandAlone下, Master角色(進程)的WEB端口,用以查看當(dāng)前Master(集群)的狀態(tài)。

18080: 默認(rèn)是歷史服務(wù)器的端口, 由于每個程序運行完成后,4040端口就被注銷了. 在以后想回看某個程序的運行狀態(tài)就可以通過歷史服務(wù)器查看,歷史服務(wù)器長期穩(wěn)定運行,可供隨時查看被記錄的程序的運行過程。

運行起來一個Spark Application, 然后打開其4040端口,并查看:/export/server/spark/bin/spark-shell --master spark://node1.itcast.cn:7077。在node1運行pyspark-shell,WEB UI監(jiān)控頁面地址:http://node1:4040。

spark

可以發(fā)現(xiàn)在一個Spark Application中,包含多個Job,每個Job有多個Stage組成,每個Job執(zhí)行按照DAG圖進行的。

其中每個Stage中包含多個Task任務(wù),每個Task以線程Thread方式執(zhí)行,需要1Core CPU。

Spark Application程序運行時三個核心概念:Job、Stage、 Task,說明如下:

 Job:由多個 Task 的并行計算部分,一般 Spark 中的 action 操作(如 save、collect,后面進一步說明),會 生成一個 Job。

 Stage:Job 的組成單位,一個 Job 會切分成多個 Stage ,Stage 彼此之間相互依賴順序執(zhí)行,而每個 Stage 是多 個 Task 的集合,類似 map 和 reduce stage。

 Task:被分配到各個 Executor 的單位工作內(nèi)容,它是 Spark 中的最小執(zhí)行單位,一般來說有多少個 Paritition (物理層面的概念,即分支可以理解為將數(shù)據(jù)劃分成不同 部分并行處理),就會有多少個 Task,每個 Task 只會處 理單一分支上的數(shù)據(jù)。




分享到:
在線咨詢 我要報名
和我們在線交談!