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

全國(guó)咨詢/投訴熱線:400-618-4000

Spark角色在StandAlone中的分布

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

Spark角色在StandAlone中的分布

在StandAlone中Driver Program,相當(dāng)于AppMaster,整個(gè)應(yīng)用管理者,負(fù)責(zé)應(yīng)用中所有Job的調(diào)度執(zhí)行; 運(yùn)行JVM Process,運(yùn)行程序的MAIN函數(shù),必須創(chuàng)建SparkContext上下文對(duì)象;一個(gè)SparkApplication僅有一個(gè);

第二、Executors 相當(dāng)于一個(gè)線程池,運(yùn)行JVM Process,其中有很多線程,每個(gè)線程運(yùn)行一個(gè)Task任務(wù),一個(gè)Task任務(wù)運(yùn)行需要1 Core CPU,所有可以認(rèn)為Executor中線程數(shù)就等于CPU Core核數(shù); 一個(gè)Spark Application可以有多個(gè),可以設(shè)置個(gè)數(shù)和資源信息。


用戶程序從最開(kāi)始的提交到最終的計(jì)算執(zhí)行,需要經(jīng)歷以下幾個(gè)階段:
1) 用戶程序創(chuàng)建SparkContext 時(shí),新創(chuàng)建的SparkContext 實(shí)例會(huì)連接到ClusterManager。Cluster Manager 會(huì)根據(jù)用戶提交時(shí)設(shè)置的CPU 和內(nèi)存等信息為本次提交分配計(jì)算資源,啟動(dòng)Executor。

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

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

4) Driver會(huì)根據(jù)收到的Task的運(yùn)行狀態(tài)來(lái)處理不同的狀態(tài)更新。Task分為兩種:一種是Shuffle Map Task,它實(shí)現(xiàn)數(shù)據(jù)的重新洗牌,洗牌的結(jié)果保存到Executor 所在節(jié)點(diǎn)的文件系統(tǒng)中;另外一種是Result Task,它負(fù)責(zé)生成結(jié)果數(shù)據(jù);

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

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

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

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

8080: 默認(rèn)是StandAlone下, Master角色(進(jìn)程)的WEB端口,用以查看當(dāng)前Master(集群)的狀態(tài) 18080: 默認(rèn)是歷史服務(wù)器的端口, 由于每個(gè)程序運(yùn)行完成后,4040端口就被注銷了. 在以后想回看某個(gè)程序的運(yùn)行狀態(tài)就可以通過(guò)歷史。

服務(wù)器查看,歷史服務(wù)器長(zhǎng)期穩(wěn)定運(yùn)行,可供隨時(shí)查看被記錄的程序的運(yùn)行過(guò)程。

運(yùn)行起來(lái)一個(gè)Spark Application, 然后打開(kāi)其4040端口,并查看: /export/server/spark/bin/spark-shell --master spark://node1.itcast.cn:7077

在node1運(yùn)行pyspark-shell,WEB UI監(jiān)控頁(yè)面地址:http://node1:4040

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

Spark Application程序運(yùn)行時(shí)三個(gè)核心概念:Job、Stage、Task,說(shuō)明如下:

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

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

Task:被分配到各個(gè)Executor 的單位工作內(nèi)容,它是 Spark 中的最小執(zhí)行單位,一般來(lái)說(shuō)有多少個(gè)Paritition。

(物理層面的概念,即分支可以理解為將數(shù)據(jù)劃分成不同部分并行處理),就會(huì)有多少個(gè)Task,每個(gè)Task 只會(huì)處理單一分支上的數(shù)據(jù)。

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



猜你喜歡:

Spark的框架模塊和運(yùn)行模式是什么?

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

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

怎樣使用Spark Shell來(lái)讀取HDFS文件?

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

0 分享到:
和我們?cè)诰€交談!