Spark
支持的主要的三種分布式部署方式分別是standalone、spark on mesos和 spark on YARN
。
standalone模式
即獨立模式,自帶完整的服務,可單獨部署到一個集群中,無需依賴任何其他資源管理系統。它是Spark實現的資源調度框架,其主要的節點有Client節點、Master節點和Worker節點。
yarn模式
yarn是統一的資源管理機制,在上面可以運行多套計算框架,如map
reduce、storm等根據driver在集群中的位置不同,分為yarn client和yarn cluster。
云計算四種部署模式?mesos模式
mesos是一個更強大的分布式資源管理框架,它允許多種不同的框架部署在其上,包括yarn。
基本上,Spark
的運行模式取決于傳遞給SparkContext
的MASTER
環境變量的值,個別模式還需要輔助的程序接口來配合使用,目前支持的Master字符串及URL包括:
Master URL Meaning
local 在本地運行,只有一個工作進程,無并行計算能力。local[K] 在本地運行,有K個工作進程,通常設置K為機器的CPU核心數量。local[*] 在本地運行,工作進程數量等于機器的CPU核心數量。spark://HOST:PORT 以Standalone模式運行,這是Spark自身提供的集群運行模式,默認端口號: 7077。mesos://HOST:PORT 在Mesos集群上運行,Driver進程和Worker進程運行在Mesos集群上,部署模式必須使用固定值:--deploy-mode cluster。yarn-client 在Yarn集群上運行,Driver進程在本地,Work進程在Yarn集群上,部署模式必須使用固定值:--deploy-mode client。Yarn集群地址必須在HADOOP_CONF_DIRorYARN_CONF_DIR變量里定義。yarn-cluster 在Yarn集群上運行,Driver進程在Yarn集群上,Work進程也在Yarn集群上,部署模式必須使用固定值:--deploy-mode cluster。Yarn集群地址必須在HADOOP_CONF_DIRorYARN_CONF_DIR變量里定義。
用戶在提交任務給Spark
處理時,以下兩個參數
共同決定了Spark
的運行方式。
· –master MASTER_URL :決定了Spark任務提交給哪種集群處理。
· –deploy-mode DEPLOY_MODE:決定了Driver的運行方式,可選值為Client或者Cluster。
standalone
集群由三個不同級別的節點組成,分別是
Master
處在Active
狀態worker
,如果worker為零,什么事也做不了executor
,啟動的個數受限于機器中的cpu核數
在standalone
部署模式下又分為client模式
和cluster模式
,其中client模式
下,driver和client
運行于同一JVM
中,不由worker啟動,該JVM進程
直到spark application
計算完成返回結果后才退出。如下圖所示。
hadoop菜鳥入門。而在cluster
模式下,driver
由worker
啟動,client
在確認spark application
成功提交給cluster
后直接退出,并不等待spark application
運行結果返回。如下圖所示
從部署圖來進行分析,每個JVM進程
在啟動時的文件依賴如何得到滿足。
Master進程
最為簡單,除了spark jar包之外,不存在第三方庫依賴Driver
和Executor
在運行的時候都有可能存在第三方包依賴,分開來講Driver比較簡單,spark-submit在提交的時候會指定所要依賴的jar文件從哪里讀取
Executor由worker來啟動,worker需要下載Executor啟動時所需要的jar文件,那么從哪里下載呢。
bin/spark-submit
部署工具或者bin/spark-class
啟動應用程序的Driver進程,Driver
進程會初始化SparkContext
對象,并向Master
節點進行注冊。Master
節點接受Driver程序
的注冊,檢查它所管理的Worker
節點,為該Driver
程序分配需要的計算資源Executor
。Worker
節點完成Executor
的分配后,向Master
報告Executor
的狀態。Worker節點
上的ExecutorBackend進程
啟動后,向Driver進程
注冊。Driver進程
內部通過DAG Schaduler,Stage Schaduler,Task Schaduler
等過程完成任務的劃分后,向Worker節點上的ExecutorBackend
分配TASK
。ExecutorBackend
進行TASK
計算,并向Driver
報告TASK狀態,直至結束。Driver
進程在所有TASK
都處理完成后,向Master注銷。Spark
能夠以standalone模式
運行,這是Spark自身提供的運行模式,用戶可以通過手動啟動master
和worker
進程來啟動一個獨立的集群,也可以在一臺機器上運行這些守護進程進行測試。standalone模式
可以用在生產環境,它有效的降低了用戶學習、測試Spark框架的成本。
standalone模式
目前只支持跨應用程序的簡單FIFO調度
。然而,為了允許多個并發用戶,你可以控制每個應用使用的資源的最大數。默認情況下,它會請求使用集群的全部CUP內核。
缺省情況下,standalone任務
調度允許worker
的失敗(在這種情況下它可以將失敗的任務轉移給其他的worker)。但是,調度器使用master來做調度,這會產生一個單點問題:如果master
崩潰,新的應用不會被創建。為了解決這個問題,可以zookeeper
的選舉機制在集群中啟動多個master,也可以使用本地文件實現單節點恢復。
docker如何部署項目。
YARN
總體上也Master/slave架構
——ResourceManager/NodeManager
。
(RM)負責對各個
NodeManager(NM)
上的資源進行統一管理和調度。
container
是資源分配和調度的基本單位,其中封裝了機器資源,如內存、CPU、磁盤和網絡等,每個任務會被分配一個Container,該任務只能在該Container
中執行,并使用該Container
封裝的資源`。
NodeManager
的作用則是負責接收并啟動應用的container
、而向RM回報本節點上的應用Container
運行狀態和資源使用情況。
ApplicationMaster
與具體的Application
相關,主要負責同ResourceManage
r協商以獲取合適的Container
,并跟蹤這些Container
的狀態和監控其進度。
如下圖所示為yarn集群的一般模型。
hadoop部署?Spark在yarn集群上的部署方式分為兩種,yarn client
(driver運行在客戶端)和yarn cluster
(driver運行在master上),driver on master如下圖所示。
(1) Spark Yarn Client向YARN中提交應用程序,包括Application Master程序、啟動Application Master的命令、需要在Executor中運行的程序等;
(2) Resource manager收到請求后,在其中一個node manager中為應用程序分配一個container,要求它在container中啟動應用程序的Application Master,Application master初始化sparkContext以及創建DAG Scheduler和Task Scheduler。
(3) Application master根據sparkContext中的配置,向resource manager申請container,同時,Application master向Resource manager注冊,這樣用戶可通過Resource manager查看應用程序的運行狀態
(4) Resource manager 在集群中尋找符合條件的node manager,在node manager啟動container,要求container啟動executor,
(5) Executor啟動后向Application master注冊,并接收Application master分配的task
(6) 應用程序運行完成后,Application Master向Resource Manager申請注銷并關閉自己。
Driver on client如下圖所示:
(1) Spark Yarn Client向YARN的Resource Manager申請啟動Application Master。同時在SparkContent初始化中將創建DAG Scheduler和TASK Scheduler等
(2) ResourceManager收到請求后,在集群中選擇一個NodeManager,為該應用程序分配第一個Container,要求它在這個Container中啟動應用程序的ApplicationMaster,與YARN-Cluster區別的是在該ApplicationMaster不運行SparkContext,只與SparkContext進行聯系進行資源的分派
(3) Client中的SparkContext初始化完畢后,與Application Master建立通訊,向Resource Manager注冊,根據任務信息向Resource Manager申請資源(Container)
(4) 當application master申請到資源后,便與node manager通信,要求它啟動container
(5) Container啟動后向driver中的sparkContext注冊,并申請task
(6) 應用程序運行完成后,Client的SparkContext向ResourceManager申請注銷并關閉自己。
在Yarn-client(Driver on client)中,Application Master僅僅從Yarn中申請資源給Executor,之后client會跟container通信進行作業的調度。如果client
離集群距離較遠,建議不要采用此方式,不過此方式有利于交互式的作業。
standalone
模式和yarn
模式client or cluster
模式版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态