Spark的三種集群deploy模式對比
Spark有三種集群部署模式,或者叫做集群管理模式。分別是standalone,YARN和Mesos。這三種模式其實(shí)都是master/slave模式。
那么在實(shí)際的項(xiàng)目中,我們該如何對比選擇呢?下面是我的一些總結(jié),主要參考了:
Which Apache Spark Cluster Managers Are The Right Fit? YARN, Mesos, or Standalone?
三種集群資源管理概述
Spark Standalone
作為Spark的一部分,Standalone是一個(gè)簡單的集群管理器。它具有master的HA,彈性應(yīng)對WorkerFailures,對每個(gè)應(yīng)用程序的管理資源的能力,并且可以在現(xiàn)有的Hadoop一起運(yùn)行和訪問HDFS的數(shù)據(jù)。該發(fā)行版包括一些腳本,可以很容易地部署在本地或在AmazonEC2云計(jì)算。它可以在Linux,Windows或Mac OSX上運(yùn)行。
Apache Mesos
Apache Mesos ,分布式系統(tǒng)內(nèi)核,具有HA的masters和slaves,可以管理每個(gè)應(yīng)用程序的資源,并對Docker容器有很好的支持。它可以運(yùn)行Spark工作, Hadoop的MapReduce的,或任何其他服務(wù)的應(yīng)用程序。它有Java, Python和C ++ 的API。它可以在Linux或Mac OSX上運(yùn)行。
Hadoop YARN
Hadoop YARN,作業(yè)調(diào)度和集群資源管理的分布式計(jì)算框架,具有HA為masters和slaves,在非安全模式下支持Docker容器,在安全模式下支持 Linux和Windows container executors,和可插拔的調(diào)度器。它可以運(yùn)行在Linux和Windows上運(yùn)行。
集群資源調(diào)度能力的對比
模式資源調(diào)度能力比對SecurityHA
- standalone 只支持FIFO調(diào)度器,單用戶串行,默認(rèn)所有節(jié)點(diǎn)的所有資源對應(yīng)用都可用,node節(jié)點(diǎn)的限制,cpu內(nèi)存等限制可以通過SparkConf來控制 shared secret ,SSL for data encryptionStandby Masters with ZooKeeper和本地文件系統(tǒng)的單點(diǎn)恢復(fù)
- YARN 支持資源調(diào)度器Scheduler,應(yīng)用管理器ApplicationsManager。CapacityScheduler和 FairScheduler在隊(duì)列的范圍內(nèi),資源共享。Kerberos。SSL for data encryption主備切換的HA方式,依賴于zookeeper,但不需要單獨(dú)的zkfc進(jìn)程
- Mesos看下方:插件式安全模塊,默認(rèn)Cyrus SASL,SSL for data encryption一主多備,基于zookeeper的leader選舉
Mesos的資源調(diào)度能力描述
粗粒度模式(Coarse-grained Mode):每個(gè)應(yīng)用程序的運(yùn)行環(huán)境由一個(gè)Dirver和若干個(gè)Executor組成,其中,每個(gè)Executor占用若干資源,內(nèi)部可運(yùn)行多個(gè) Task(對應(yīng)多少個(gè)“slot”)。應(yīng)用程序的各個(gè)任務(wù)正式運(yùn)行之前,需要將運(yùn)行環(huán)境中的資源全部申請好,且運(yùn)行過程中要一直占用這些資源,即使不用,***程序運(yùn)行結(jié)束后,回收這些資源。舉個(gè)例子,比如你提交應(yīng)用程序時(shí),指定使用5個(gè)executor運(yùn)行你的應(yīng)用程序,每個(gè)executor占用5GB內(nèi)存和5個(gè)CPU,每個(gè)executor內(nèi)部設(shè)置了5個(gè)slot,則Mesos需要先為executor分配資源并啟動(dòng)它們,之后開始調(diào)度任務(wù)。另外,在程序運(yùn)行過程中,mesos的master和slave并不知道executor內(nèi)部各個(gè)task的運(yùn)行情況,executor直接將任務(wù)狀態(tài)通過內(nèi)部的通信機(jī)制匯報(bào)給Driver,從一定程度上可以認(rèn)為,每個(gè)應(yīng)用程序利用mesos搭建了一個(gè)虛擬集群自己使用。
細(xì)粒度模式(Fine-grained Mode):鑒于粗粒度模式會(huì)造成大量資源浪費(fèi),Spark On Mesos還提供了另外一種調(diào)度模式:細(xì)粒度模式,這種模式類似于現(xiàn)在的云計(jì)算,思想是按需分配。與粗粒度模式一樣,應(yīng)用程序啟動(dòng)時(shí),先會(huì)啟動(dòng) executor,但每個(gè)executor占用資源僅僅是自己運(yùn)行所需的資源,不需要考慮將來要運(yùn)行的任務(wù),之后,mesos會(huì)為每個(gè)executor動(dòng)態(tài)分配資源,每分配一些,便可以運(yùn)行一個(gè)新任務(wù),單個(gè)Task運(yùn)行完之后可以馬上釋放對應(yīng)的資源。每個(gè)Task會(huì)匯報(bào)狀態(tài)給Mesos slave和Mesos Master,便于更加細(xì)粒度管理和容錯(cuò),這種調(diào)度模式類似于MapReduce調(diào)度模式,每個(gè)Task完全獨(dú)立,優(yōu)點(diǎn)是便于資源控制和隔離,但缺點(diǎn)也很明顯,短作業(yè)運(yùn)行延遲大。
筆者總結(jié)
- 從對比上看,mesos似乎是Spark更好的選擇,也是被官方推薦的
- 但如果你同時(shí)運(yùn)行hadoop和Spark,從兼容性上考慮,Yarn似乎是更好的選擇,畢竟是親生的。Spark on Yarn運(yùn)行的也不錯(cuò)。
- 如果你不僅運(yùn)行了hadoop,spark。還在資源管理上運(yùn)行了docker,Mesos似乎更加通用。
- standalone小規(guī)模計(jì)算集群,似乎更適合!