更新時(shí)間:2024-03-07 來源:黑馬程序員 瀏覽量:
Apache Spark是一個(gè)分布式計(jì)算框架,而YARN(Yet Another Resource Negotiator)是Hadoop生態(tài)系統(tǒng)中的資源管理器。在使用Spark on YARN時(shí),Spark作業(yè)的執(zhí)行流程如下所示:
1.提交作業(yè):
用戶通過Spark提交作業(yè)到Y(jié)ARN集群。作業(yè)可以是Spark應(yīng)用程序(使用 SparkContext 或 SparkSession)或者 Spark SQL查詢。
2.資源申請(qǐng):
YARN ResourceManager接收到作業(yè)提交請(qǐng)求后,分配一個(gè)ApplicationMaster(AM)給該作業(yè)。AM負(fù)責(zé)管理作業(yè)的執(zhí)行。
3.ApplicationMaster啟動(dòng):
YARN在集群中選擇一個(gè)節(jié)點(diǎn)來啟動(dòng)ApplicationMaster。ApplicationMaster負(fù)責(zé)與ResourceManager通信,協(xié)調(diào)作業(yè)的執(zhí)行,以及申請(qǐng)和分配資源。
4.資源分配:
ApplicationMaster向ResourceManager請(qǐng)求執(zhí)行作業(yè)所需的資源,包括CPU、內(nèi)存和其他相關(guān)資源。ResourceManager根據(jù)集群的資源狀況和作業(yè)的需求來分配資源。
5.任務(wù)調(diào)度:
一旦資源分配完成,ApplicationMaster開始調(diào)度作業(yè)的任務(wù)。Spark on YARN使用Spark的調(diào)度器來決定如何將作業(yè)拆分成不同的任務(wù),并在集群中的節(jié)點(diǎn)上啟動(dòng)這些任務(wù)。
6.任務(wù)執(zhí)行:
每個(gè)任務(wù)在分配到的資源上執(zhí)行Spark代碼。這些任務(wù)可能包括數(shù)據(jù)加載、轉(zhuǎn)換、計(jì)算和輸出等操作,根據(jù)作業(yè)的邏輯而定。
7.數(shù)據(jù)讀取和計(jì)算:
Spark作業(yè)會(huì)從數(shù)據(jù)源讀取數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換和計(jì)算,并生成相應(yīng)的結(jié)果。
8.結(jié)果輸出:
計(jì)算完成后,Spark作業(yè)可能會(huì)將結(jié)果寫入文件系統(tǒng)、數(shù)據(jù)庫(kù)或者其他存儲(chǔ)系統(tǒng)中,以供后續(xù)分析或應(yīng)用程序使用。
9.監(jiān)控和管理:
YARN和Spark提供了各種工具來監(jiān)控作業(yè)的執(zhí)行情況和資源使用情況。用戶可以通過YARN ResourceManager UI、Spark UI等來查看作業(yè)的狀態(tài)、進(jìn)度和日志信息,并對(duì)作業(yè)進(jìn)行管理和調(diào)優(yōu)。
10.作業(yè)完成:
一旦作業(yè)執(zhí)行完成,ApplicationMaster會(huì)向ResourceManager發(fā)送作業(yè)完成的通知,并釋放所占用的資源。用戶可以根據(jù)作業(yè)的執(zhí)行結(jié)果來進(jìn)行后續(xù)的分析和處理。
總體來說,Spark on YARN的作業(yè)執(zhí)行流程包括資源申請(qǐng)、任務(wù)調(diào)度、任務(wù)執(zhí)行和結(jié)果輸出等步驟,通過 YARN和Spark的協(xié)同工作,實(shí)現(xiàn)了高效的分布式計(jì)算。