Spark集群模式概述

該文檔給出了 Spark 如何在集群上運(yùn)行、使之更容易來(lái)理解所涉及到的組件的簡(jiǎn)短概述

組件

Spark 應(yīng)用在集群上作為獨(dú)立的進(jìn)程組來(lái)運(yùn)行,在您的 main 程序中通過(guò) SparkContext 來(lái)協(xié)調(diào)(稱(chēng)之為 driver 程序)。
具體的說(shuō),為了運(yùn)行在集群上,SparkContext 可以連接至幾種類(lèi)型的 Cluster Manager(既可以用 Spark 自己的 Standlone Cluster Manager,或者 Mesos,也可以使用 YARN),它們會(huì)分配應(yīng)用的資源。一旦連接上,Spark 獲得集群中節(jié)點(diǎn)上的 Executor,這些進(jìn)程可以運(yùn)行計(jì)算并且為您的應(yīng)用存儲(chǔ)數(shù)據(jù)。接下來(lái),它將發(fā)送您的應(yīng)用代碼(通過(guò) JAR 或者 Python 文件定義傳遞給 SparkContext)至 Executor。最終,SparkContext 將發(fā)送 Task 到 Executor 以運(yùn)行。


這里有幾個(gè)關(guān)于這個(gè)架構(gòu)需要注意的地方 :

  1. 每個(gè)應(yīng)用獲取到它自己的 Executor 進(jìn)程,它們會(huì)保持在整個(gè)應(yīng)用的生命周期中并且在多個(gè)線(xiàn)程中運(yùn)行 Task(任務(wù))。這樣做的優(yōu)點(diǎn)是把應(yīng)用互相隔離,在調(diào)度方面(每個(gè) driver 調(diào)度它自己的 task)和 Executor 方面(來(lái)自不同應(yīng)用的 task 運(yùn)行在不同的 JVM 中)。然而,這也意味著若是不把數(shù)據(jù)寫(xiě)到外部的存儲(chǔ)系統(tǒng)中的話(huà),數(shù)據(jù)就不能夠被不同的 Spark 應(yīng)用(SparkContext 的實(shí)例)之間共享。
  2. Spark 是不知道底層的 Cluster Manager 到底是什么類(lèi)型的。只要它能夠獲得 Executor 進(jìn)程,并且它們可以和彼此之間通信,那么即使是在一個(gè)也支持其它應(yīng)用的 Cluster Manager(例如,Mesos / YARN)上來(lái)運(yùn)行它也是相對(duì)簡(jiǎn)單的。
  3. Driver 程序必須在自己的生命周期內(nèi)監(jiān)聽(tīng)和接受來(lái)自它的 Executor 的連接請(qǐng)求。同樣的,driver 程序必須可以從 worker 節(jié)點(diǎn)上網(wǎng)絡(luò)尋址(就是網(wǎng)絡(luò)沒(méi)問(wèn)題)。
  4. 因?yàn)?driver 調(diào)度了集群上的 task(任務(wù)),更好的方式應(yīng)該是在相同的局域網(wǎng)中靠近 worker 的節(jié)點(diǎn)上運(yùn)行。

Spark支持的Cluster Manager

  • Standalone: 包含在 Spark 中使得它更容易來(lái)安裝集群的一個(gè)簡(jiǎn)單的 Cluster Manager。
  • Apache Mesos: 一個(gè)通用的 Cluster Manager,它也可以運(yùn)行 Hadoop MapReduce 和其它服務(wù)應(yīng)用。
  • Hadoop Yarn: Hadoop 2 中的 resource manager(資源管理器)。
  • Kubernetes: 一個(gè)開(kāi)源系統(tǒng),用于自動(dòng)化的進(jìn)行部署,擴(kuò)展和管理應(yīng)用程序的容器。

術(shù)語(yǔ)

下表總結(jié)了您將看到的用于引用集群概念的術(shù)語(yǔ):

Term(術(shù)語(yǔ)) Meaning(含義)
Application 用戶(hù)構(gòu)建在 Spark 上的程序。由集群上的一個(gè) driver 程序和多個(gè) executor 組成。
Application jar 一個(gè)包含用戶(hù) Spark 應(yīng)用的 Jar。有時(shí)候用戶(hù)會(huì)想要去創(chuàng)建一個(gè)包含他們應(yīng)用以及它的依賴(lài)的 “uber jar”。用戶(hù)的 Jar 應(yīng)該沒(méi)有包括 Hadoop 或者 Spark 庫(kù),然而,它們將會(huì)在運(yùn)行時(shí)被添加。
Driver program 該進(jìn)程運(yùn)行應(yīng)用的 main() 方法并且創(chuàng)建了 SparkContext。
Cluster manager 一個(gè)外部的用于獲取集群上資源的服務(wù)。(例如,Standlone Manager,Mesos,YARN)
Deploy mode 根據(jù) driver 程序運(yùn)行的地方區(qū)別。在 “Cluster” 模式中,框架在群集內(nèi)部啟動(dòng) driver。在 “Client” 模式中,submitter(提交者)在 Custer 外部啟動(dòng) driver。
Worker node 任何在集群中可以運(yùn)行應(yīng)用代碼的節(jié)點(diǎn)。
Job 一個(gè)由多個(gè)任務(wù)組成的并行計(jì)算,并且能從 Spark action 中獲取響應(yīng)(例如 save, collect); 您將在 driver 的日志中看到這個(gè)術(shù)語(yǔ)。
Stage 每個(gè) Job 被拆分成更小的被稱(chēng)作 stage(階段) 的 task(任務(wù)) 組,stage 彼此之間是相互依賴(lài)的(與 MapReduce 中的 map 和 reduce stage 相似)。您將在 driver 的日志中看到這個(gè)術(shù)語(yǔ)。
Task 一個(gè)將要被發(fā)送到 Executor 中的工作單元。
Executor 一個(gè)為了在 worker 節(jié)點(diǎn)上的應(yīng)用而啟動(dòng)的進(jìn)程,它運(yùn)行 task 并且將數(shù)據(jù)保持在內(nèi)存中或者硬盤(pán)存儲(chǔ)。每個(gè)應(yīng)用有它自己的 Executor。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容