spark集群部署模式概覽

spark集群部署模式概覽

[原文連接]

元素

一個spark應(yīng)用包含運(yùn)行在集群里的一系列進(jìn)程,它們由主程序(稱作driver)里的SparkContext對象協(xié)調(diào)。

運(yùn)行圖

SparkContext可以連接不同的集群管理器( Spark的 standalone cluster manager/ Mesos/YARN),這層抽象使得spark可以利用不同的底層設(shè)施。集群管理器用于分配資源,spark應(yīng)用的運(yùn)行流程與其密切相關(guān)。在連接到集群管理器之后,spark首先在集群的各節(jié)點(diǎn)上獲取executor(用來執(zhí)行結(jié)算和存取數(shù)據(jù));然后,spark將你的代碼(JAR/ Python files /..)發(fā)給executor;最后,由SparkContext分配任務(wù)給executor執(zhí)行。

在這個架構(gòu)中有幾點(diǎn)值得注意:

  1. 各應(yīng)用程序的executor進(jìn)程是獨(dú)立的,它們的生命周期為整個應(yīng)用程序的運(yùn)行周期,在多線程中運(yùn)行任務(wù)。 這有利于各調(diào)度方(每個driver安排自己的任務(wù))和各執(zhí)行方(不同應(yīng)用程序的任務(wù)運(yùn)行在不同JVM中)之間彼此隔離。但是,這也意味著在不寫入外部存儲的情況下,不能跨Spark應(yīng)用程序(SparkContext的實(shí)例)共享數(shù)據(jù)。
  2. Spark對底層群集管理器是不可見的。只要可以獲取executor進(jìn)程,并且彼此進(jìn)行通信,即使在也支持其他應(yīng)用程序(例如Mesos / YARN)的集群管理器上運(yùn)行spark也很容易。
  3. driver必須在其生命周期中偵聽并接收其executors的傳入連接(例如,請參閱網(wǎng)絡(luò)配置部分中的spark.driver.port)。因此,工作節(jié)點(diǎn)必須能從網(wǎng)絡(luò)中尋址到驅(qū)動程序。
  4. 因?yàn)閐river負(fù)責(zé)調(diào)度集群上的任務(wù),所以它應(yīng)該靠近工作節(jié)點(diǎn)運(yùn)行,最好在一個局域網(wǎng)內(nèi)。 如果要遠(yuǎn)程發(fā)送請求到集群,最好是向driver發(fā)起一個RPC,并讓其從附近提交操作,而不是在遠(yuǎn)離工作節(jié)點(diǎn)的位置直接運(yùn)行驅(qū)動程序。

集群管理器分類

目前支持如下幾種管理器:

  • Standalone - Spark內(nèi)置,可以方便的部署集群
  • Apache Mesos - 常用的集群管理器,可運(yùn)行Hadoop Mapreduce 和服務(wù)程序
  • Hadoop YARN - Hadoop2的資源管理器
  • Kubernetes(試驗(yàn)性) - 試驗(yàn)性支持,開發(fā)中,更多可參加項(xiàng)目主頁

應(yīng)用提交

使用spark-submit腳本,可以將應(yīng)用程序提交到一個任意類型的集群中運(yùn)行,這里是詳細(xì)文檔:[application submission guide] 。

監(jiān)控

每個driver都有一個web界面,可以監(jiān)控其上運(yùn)行的任務(wù)、executors和存儲使用情況。具體參見:monitoring guide

任務(wù)調(diào)度

參考 job scheduling overview

術(shù)語

術(shù)語 含義
Application Spark應(yīng)用程序。包括driver程序和集群上的executor
Application jar 一個jar包包含了用戶的spark應(yīng)用。用戶jar包中不應(yīng)該引入Hadoop/spark的庫,它們會在運(yùn)行時被添加
Driver program 運(yùn)行main()函數(shù)并且創(chuàng)建SparkContext的進(jìn)程
Cluster manager 用來從集群獲取資源的外部服務(wù) (例如standalone manager, Mesos, YARN)
Deploy mode 決定driver進(jìn)程在哪里運(yùn)行。"cluster" 模式下運(yùn)行在集群內(nèi);"client"模式下,submitter在集群外運(yùn)行driver
Worker node 集群內(nèi)可以運(yùn)行Application的節(jié)點(diǎn)
Executor 一個worker節(jié)點(diǎn)上運(yùn)行的負(fù)責(zé)執(zhí)行任務(wù)和存儲數(shù)據(jù)的進(jìn)程。每個Application擁有自己的executor
Task 可以發(fā)送給executor執(zhí)行的任務(wù)單位
Job 由多個Task組成的并行計(jì)算,響應(yīng)Spark動作(例如save,collect)而產(chǎn)生;driver日志中可以看到此術(shù)語
Stage 每個job被分成更小的任務(wù),稱為相互依賴的stage(類似于Map、Reduce);driver日志中可以看到此術(shù)語
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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