Apache Spark 架構(gòu)設(shè)計(jì)是其高效、分布式處理能力的基礎(chǔ)。Spark 的架構(gòu)主要包括以下幾個(gè)核心組件:
-
Driver Program(驅(qū)動(dòng)器)
- 驅(qū)動(dòng)器程序負(fù)責(zé)執(zhí)行用戶的主函數(shù),創(chuàng)建 SparkContext 對(duì)象。
- 它負(fù)責(zé)構(gòu)建并優(yōu)化 DAG(有向無(wú)環(huán)圖),表示 RDD(彈性分布式數(shù)據(jù)集)操作的執(zhí)行計(jì)劃。
- 驅(qū)動(dòng)器還負(fù)責(zé)任務(wù)的調(diào)度,并與集群管理器(如 Hadoop YARN、Apache Mesos 或 Standalone 模式下的 Master 節(jié)點(diǎn))進(jìn)行通信以獲取和分配資源。
-
Cluster Manager(集群管理器)
- 集群管理器是整個(gè)集群資源的管理者,根據(jù)應(yīng)用需求分配執(zhí)行作業(yè)所需的計(jì)算資源。
- 在不同的部署模式下,集群管理器可以是 Hadoop YARN、Mesos、Kubernetes 或 Spark 自帶的 Standalone 模式。
-
Executor(執(zhí)行器)
- 執(zhí)行器在集群中的每個(gè)工作節(jié)點(diǎn)上運(yùn)行,由 Driver 程序啟動(dòng)并與之通信。
- Executor 為應(yīng)用程序提供了一塊內(nèi)存空間(包括存儲(chǔ)區(qū)域和計(jì)算區(qū)域),用于緩存數(shù)據(jù)和執(zhí)行實(shí)際的數(shù)據(jù)處理任務(wù)。
- 執(zhí)行器之間可以直接通過(guò)網(wǎng)絡(luò)通信交換數(shù)據(jù),從而實(shí)現(xiàn)高效的數(shù)據(jù)共享和協(xié)同計(jì)算。
-
Task(任務(wù))
- Task 是 Spark 計(jì)算的基本單位,由 Driver 分配給 Executor 執(zhí)行。
- 當(dāng) RDD 進(jìn)行轉(zhuǎn)換或行動(dòng)操作時(shí),DAG 調(diào)度器會(huì)將這些操作分解成多個(gè)任務(wù)并在 Executor 上并發(fā)執(zhí)行。
-
RDD(彈性分布式數(shù)據(jù)集)
- RDD 是 Spark 提供的核心抽象,代表了分布在集群中不同節(jié)點(diǎn)上的不可變、可分區(qū)的數(shù)據(jù)集合。
- RDD 支持兩種類型的算子:轉(zhuǎn)換(Transformation)和動(dòng)作(Action)。轉(zhuǎn)換不會(huì)立即執(zhí)行,而是構(gòu)建 DAG;而動(dòng)作觸發(fā) DAG 的執(zhí)行,并從集群中收集結(jié)果。
-
DAG Scheduler(DAG 調(diào)度器)
- 在 Driver 中,DAG 調(diào)度器將多個(gè)轉(zhuǎn)換操作合并成階段(Stage),并生成任務(wù)集提交給底層的任務(wù)調(diào)度器(TaskScheduler)進(jìn)一步執(zhí)行。
-
TaskScheduler(任務(wù)調(diào)度器)
- 根據(jù) DAG 調(diào)度器提供的任務(wù)集,任務(wù)調(diào)度器與集群管理器交互,將任務(wù)分配到各個(gè)可用的 Executor 上執(zhí)行。
通過(guò)上述組件的協(xié)作,Spark 實(shí)現(xiàn)了一個(gè)高度靈活且容錯(cuò)性強(qiáng)的大數(shù)據(jù)處理框架,能夠支持批處理、流處理、機(jī)器學(xué)習(xí)等多種應(yīng)用場(chǎng)景。
Apache Spark 的工作流程主要包括以下步驟:
-
啟動(dòng)Spark應(yīng)用程序
- 用戶通過(guò)編寫一個(gè)主函數(shù),創(chuàng)建
SparkContext
對(duì)象。這個(gè)對(duì)象是與Spark集群交互的入口點(diǎn)。
- 用戶通過(guò)編寫一個(gè)主函數(shù),創(chuàng)建
-
構(gòu)建RDD(彈性分布式數(shù)據(jù)集)
- 用戶定義或從外部數(shù)據(jù)源讀取數(shù)據(jù),生成初始的 RDD??梢酝ㄟ^(guò)對(duì)基礎(chǔ)數(shù)據(jù)集執(zhí)行轉(zhuǎn)換操作(Transformation)來(lái)生成新的 RDD。
-
DAG構(gòu)建和優(yōu)化
- 每個(gè) RDD 轉(zhuǎn)換操作都會(huì)被記錄下來(lái),并形成一個(gè)有向無(wú)環(huán)圖(DAG)。在用戶調(diào)用行動(dòng)操作(Action)觸發(fā)計(jì)算時(shí),Spark 的 DAG Scheduler 將會(huì)根據(jù)血緣關(guān)系分析并優(yōu)化這個(gè)圖,將其拆分成一系列階段(Stage),每個(gè)階段由一組可以并行執(zhí)行的任務(wù)(Task)組成。
-
任務(wù)調(diào)度與分配
- 優(yōu)化后的 DAG 被提交給 TaskScheduler,TaskScheduler 與 Cluster Manager 協(xié)作,將各個(gè)任務(wù)分配到集群中的 Executor 上執(zhí)行。
- Executor 在其所在的工作節(jié)點(diǎn)上為應(yīng)用啟動(dòng)進(jìn)程,維護(hù)一塊內(nèi)存空間用于存儲(chǔ)和計(jì)算數(shù)據(jù)。
-
任務(wù)執(zhí)行
- 分配到 Executor 的任務(wù)開始執(zhí)行,在Executor的內(nèi)存中處理數(shù)據(jù)。如果數(shù)據(jù)量超過(guò)內(nèi)存大小,Spark還支持磁盤存儲(chǔ)或外存存儲(chǔ),如Hadoop HDFS等。
-
數(shù)據(jù)交換與緩存
- 如果不同任務(wù)之間需要共享數(shù)據(jù),Spark 可以通過(guò)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交換,同時(shí)支持?jǐn)?shù)據(jù)緩存于內(nèi)存、磁盤或持久化到外部存儲(chǔ)系統(tǒng),以便后續(xù)復(fù)用。
-
結(jié)果收集與返回
- 當(dāng)所有任務(wù)完成后,行動(dòng)操作的結(jié)果會(huì)被收集并返回給 Driver 程序。對(duì)于某些行動(dòng)操作,例如 count 或 collect,Driver 會(huì)等待所有任務(wù)完成并將結(jié)果合并。
-
容錯(cuò)處理文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-809111.html
- 在整個(gè)過(guò)程中,Spark 提供了容錯(cuò)機(jī)制,包括 RDD 的 lineage 信息記錄和 Checkpointing 功能,當(dāng)節(jié)點(diǎn)失敗時(shí)能夠重新計(jì)算丟失的數(shù)據(jù)塊。
總結(jié)來(lái)說(shuō),Spark 工作流程的核心就是:從驅(qū)動(dòng)器程序發(fā)起計(jì)算請(qǐng)求,構(gòu)建和優(yōu)化計(jì)算邏輯,然后通過(guò)分布式執(zhí)行器高效地在集群中執(zhí)行任務(wù),并最終將結(jié)果匯集回驅(qū)動(dòng)器。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-809111.html
到了這里,關(guān)于大數(shù)據(jù)之Spark架構(gòu)設(shè)計(jì)與工作流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!