天天看點

Apache Spark支援四種分布式部署方式standalone模式Spark On Mesos模式Spark On YARN模式Kubernetes模式總結: 

Apache Spark支援四種分布式部署方式,分别是standalone、spark on mesos和 spark on YARN,Kubernetes 其中,第一種類似于MapReduce 1.0所采用的模式,内部實作了容錯性和資源管理,後兩種則是未來發展的趨勢,部分容錯性和資源管理交由統一的資源管理系統完成:讓Spark運作在一個通用的資源管理系統之上,這樣可以與其他計算架構,比如MapReduce,公用一個叢集資源,最大的好處是降低運維成本和提高資源使用率(資源按需配置設定)。本文将介紹這四種部署方式,并比較其優缺點。

standalone模式

即獨立模式,自帶完整的服務,可單獨部署到一個叢集中,無需依賴任何其他資源管理系統。從一定程度上說,該模式是其他兩種的基礎。借鑒Spark開發模式,我們可以得到一種開發新型計算架構的一般思路:先設計出它的standalone模式,為了快速開發,起初不需要考慮服務(比如master/slave)的容錯性,之後再開發相應的wrapper,将stanlone模式下的服務原封不動的部署到資源管理系統yarn或者mesos上,由資源管理系統負責服務本身的容錯。目前Spark在standalone模式下是沒有任何單點故障問題的,這是借助zookeeper實作的,思想類似于Hbase master單點故障解決方案。将Spark standalone與MapReduce比較,會發現它們兩個在架構上是完全一緻的:

1)  都是由master/slaves服務組成的,且起初master均存在單點故障,後來均通過zookeeper解決(Apache MRv1的JobTracker仍存在單點問題,但CDH版本得到了解決);

2) 各個節點上的資源被抽象成粗粒度的slot,有多少slot就能同時運作多少task。不同的是,MapReduce将slot分為map slot和reduce slot,它們分别隻能供Map Task和Reduce Task使用,而不能共享,這是MapReduce資源利率低效的原因之一,而Spark則更優化一些,它不區分slot類型,隻有一種slot,可以供各種類型的Task使用,這種方式可以提高資源使用率,但是不夠靈活,不能為不同類型的Task定制slot資源。總之,這兩種方式各有優缺點。

Spark On Mesos模式

這是很多公司采用的模式,官方推薦這種模式(當然,原因之一是血緣關系)。正是由于Spark開發之初就考慮到支援Mesos,是以,目前而言,Spark運作在Mesos上會比運作在YARN上更加靈活,更加自然。目前在Spark On Mesos環境中,使用者可選擇兩種排程模式之一運作自己的應用程式(可參考Andrew Xia的“Mesos Scheduling Mode on Spark”):

1)   粗粒度模式(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搭建了一個虛拟叢集自己使用。

2)   細粒度模式(Fine-grained Mode):鑒于粗粒度模式會造成大量資源浪費,Spark On Mesos還提供了另外一種排程模式:細粒度模式,這種模式類似于現在的雲計算,思想是按需配置設定。與粗粒度模式一樣,應用程式啟動時,先會啟動executor,但每個executor占用資源僅僅是自己運作所需的資源,不需要考慮将來要運作的任務,之後,mesos會為每個executor動态配置設定資源,每配置設定一些,便可以運作一個新任務,單個Task運作完之後可以馬上釋放對應的資源。每個Task會彙報狀态給Mesos slave和Mesos Master,便于更加細粒度管理和容錯,這種排程模式類似于MapReduce排程模式,每個Task完全獨立,優點是便于資源控制和隔離,但缺點也很明顯,短作業運作延遲大。

Spark On YARN模式

這是一種最有前景的部署模式。但限于YARN自身的發展,目前僅支援粗粒度模式(Coarse-grained Mode)。這是由于YARN上的Container資源是不可以動态伸縮的,一旦Container啟動之後,可使用的資源不能再發生變化,不過這個已經在YARN計劃中了。

spark on yarn 的支援兩種模式: 

     1) yarn-cluster:适用于生産環境; 

     2) yarn-client:适用于互動、調試,希望立即看到app的輸出 

yarn-cluster和yarn-client的差別在于yarn appMaster,每個yarn app執行個體有一個appMaster程序,是為app啟動的第一個container;負責從ResourceManager請求資源,擷取到資源後,告訴NodeManager為其啟動container。yarn-cluster和yarn-client模式内部實作還是有很大的差別。如果你需要用于生産環境,那麼請選擇yarn-cluster;而如果你僅僅是Debug程式,可以選擇yarn-client。

Kubernetes模式

暫無

總結: 

這四種分布式部署方式各有利弊,通常需要根據實際情況決定采用哪種方案。進行方案選擇時,往往要考慮公司的技術路線(采用Hadoop生态系統還是其他生态系統)、相關技術人才儲備等。上面涉及到Spark的許多部署模式,究竟哪種模式好這個很難說,需要根據你的需求,如果你隻是測試Spark Application,你可以選擇local模式。而如果你資料量不是很多,Standalone 是個不錯的選擇。當你需要統一管理叢集資源(Hadoop、Spark等),那麼你可以選擇Yarn或者mesos,但是這樣維護成本就會變高。 

· 從對比上看,mesos似乎是Spark更好的選擇,也是被官方推薦的 

· 但如果你同時運作hadoop和Spark,從相容性上考慮,Yarn是更好的選擇。 · 如果你不僅運作了hadoop,spark。還在資源管理上運作了docker,Mesos更加通用。 

· Standalone對于小規模計算叢集更适合!

繼續閱讀