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