教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Spark角色在StandAlone中的分布

更新時間:2022年03月11日15時59分 來源:傳智教育 瀏覽次數(shù):

Spark角色在StandAlone中的分布

在StandAlone中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í)行成功時停止;

Spark程序運行層次結(jié)構(gòu)

監(jiān)控頁面,有4040,有8080,有18080,它們有何區(qū)別?

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

8080: 默認(rèn)是StandAlone下, Master角色(進(jìn)程)的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

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

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

Job:由多個Task 的并行計算部分,一般Spark 中的 action 操作(如save、collect,后面進(jìn)一步說明),會生成一個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ù)。

一個Spark程序會被分成多個子任務(wù)(Job)運行, 每一個Job會分成多個State(階段)來運行, 每一個State內(nèi)會分出來多個Task(線程)來執(zhí)行具體任務(wù)。



猜你喜歡:

Spark的框架模塊和運行模式是什么?

Spark的應(yīng)用場景有哪些?

Spark與Hadoop有哪些區(qū)別?【大數(shù)據(jù)培訓(xùn)】

怎樣使用Spark Shell來讀取HDFS文件?

傳智教育Python+大數(shù)據(jù)開發(fā)培訓(xùn)課程

0 分享到:
和我們在線交談!