Spark學習筆記3——spark運行模式

Spark三種運行模式

1.standalone模式

與MapReduce1.0框架類似,Spark框架本身也自帶了完整的資源調度管理服務,可以獨立部署到一個集羣中,而不需要依賴其他系統來爲其提供資源管理調度服務。在架構的設計上,Spark與MapReduce1.0完全一致,都是由一個Master和若干個Slave構成,並且以槽(slot)作爲資源分配單位。不同的是,Spark中的槽不再像MapReduce1.0那樣分爲Map 槽和Reduce槽,而是隻設計了統一的一種槽提供給各種任務來使用。

2.Spark on Mesos模式

Mesos是一種資源調度管理框架,可以爲運行在它上面的Spark提供服務。Spark on Mesos模式中,Spark程序所需要的各種資源,都由Mesos負責調度。由於Mesos和Spark存在一定的血緣關係,因此,Spark這個框架在進行設計開發的時候,就充分考慮到了對Mesos的充分支持,因此,相對而言,Spark運行在Mesos上,要比運行在YARN上更加靈活、自然。目前,Spark官方推薦採用這種模式,所以,許多公司在實際應用中也採用該模式。

3. Spark on YARN模式、

 YARN是一種統一資源管理機制,在其上面可以運行多套計算框架。目前的大數據技術世界,大多數公司除了使用Spark來進行數據計算,由於歷史原因或者單方面業務處理的性能考慮而使用着其他的計算框架,比如MapReduce、Storm等計算框架。Spark基於此種情況開發了Spark on YARN的運行模式,由於藉助了YARN良好的彈性資源管理機制,不僅部署Application更加方便,而且用戶在YARN集羣中運行的服務和Application的資源也完全隔離,更具實踐應用價值的是YARN可以通過隊列的方式,管理同時運行在集羣中的多個服務。

    Spark on YARN模式根據Driver在集羣中的位置分爲兩種模式:一種是YARN-Client模式,另一種是YARN-Cluster(或稱爲YARN-Standalone模式)。

    1:Yarn框架流程

        任何框架與YARN的結合,都必須遵循YARN的開發模式。在分析Spark on YARN的實現細節之前,有必要先分析一下YARN框架的一些基本原理。Yarn框架的基本流程如下:

     其中,ResourceManager負責將集羣的資源分配給各個應用使用,而資源分配和調度的基本單位是Container,其中封裝了機器資源,如內存、CPU、磁盤和網絡等,每個任務會被分配一個Container,該任務只能在該Container中執行,並使用該Container封裝的資源。NodeManager是一個個的計算節點,主要負責啓動Application所需的Container,監控資源(內存、CPU、磁盤和網絡等)的使用情況並將之彙報給ResourceManager。ResourceManager與NodeManagers共同組成整個數據計算框架,ApplicationMaster與具體的Application相關,主要負責同ResourceManager協商以獲取合適的Container,並跟蹤這些Container的狀態和監控其進度。

2:Yarn Client模式

         Yarn-Client模式中,Driver在客戶端本地運行,這種模式可以使得Spark Application和客戶端進行交互,因爲Driver在客戶端,所以可以通過webUI訪問Driver的狀態,默認是http://hadoop1:4040訪問,而YARN通過http:// hadoop1:8088訪問。

         YARN-client的工作流程分爲以下幾個步驟:

(1).Spark Yarn Client向YARN的ResourceManager申請啓動Application Master。同時在SparkContent初始化中將創建DAGScheduler和TASKScheduler等,由於我們選擇的是Yarn-Client模式,程序會選擇YarnClientClusterScheduler和YarnClientSchedulerBackend;

(2).ResourceManager收到請求後,在集羣中選擇一個NodeManager,爲該應用程序分配第一個Container,要求它在這個Container中啓動應用程序的ApplicationMaster,與YARN-Cluster區別的是在該ApplicationMaster不運行SparkContext,只與SparkContext進行聯繫進行資源的分派;

(3).Client中的SparkContext初始化完畢後,與ApplicationMaster建立通訊,向ResourceManager註冊,根據任務信息向ResourceManager申請資源(Container);

(4).一旦ApplicationMaster申請到資源(也就是Container)後,便與對應的NodeManager通信,要求它在獲得的Container中啓動啓動CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend啓動後會向Client中的SparkContext註冊並申請Task;

(5).Client中的SparkContext分配Task給CoarseGrainedExecutorBackend執行,CoarseGrainedExecutorBackend運行Task並向Driver彙報運行的狀態和進度,以讓Client隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啓動任務;

(6).應用程序運行完成後,Client的SparkContext向ResourceManager申請註銷並關閉自己。

3:Spark Cluster模式

          在YARN-Cluster模式中,當用戶向YARN中提交一個應用程序後,YARN將分兩個階段運行該應用程序:第一個階段是把Spark的Driver作爲一個ApplicationMaster在YARN集羣中先啓動;第二個階段是由ApplicationMaster創建應用程序,然後爲它向ResourceManager申請資源,並啓動Executor來運行Task,同時監控它的整個運行過程,直到運行完成。

          YARN-cluster的工作流程分爲以下幾個步驟:

   (1). Spark Yarn Client向YARN中提交應用程序,包括ApplicationMaster程序、啓動ApplicationMaster的命令、需要在Executor中運行的程序等;

    (2). ResourceManager收到請求後,在集羣中選擇一個NodeManager,爲該應用程序分配第一個Container,要求它在這個Container中啓動應用程序的ApplicationMaster,其中ApplicationMaster進行SparkContext等的初始化;

    (3).  ApplicationMaster向ResourceManager註冊,這樣用戶可以直接通過ResourceManage查看應用程序的運行狀態,然後它將採用輪詢的方式通過RPC協議爲各個任務申請資源,並監控它們的運行狀態直到運行結束;

    (4).  一旦ApplicationMaster申請到資源(也就是Container)後,便與對應的NodeManager通信,要求它在獲得的Container中啓動啓動CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend啓動後會向ApplicationMaster中的SparkContext註冊並申請Task。這一點和Standalone模式一樣,只不過SparkContext在Spark Application中初始化時,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler進行任務的調度,其中YarnClusterScheduler只是對TaskSchedulerImpl的一個簡單包裝,增加了對Executor的等待邏輯等;

   (5). ApplicationMaster中的SparkContext分配Task給CoarseGrainedExecutorBackend執行,CoarseGrainedExecutorBackend運行Task並向ApplicationMaster彙報運行的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啓動任務;

    (6). 應用程序運行完成後,ApplicationMaster向ResourceManager申請註銷並關閉自己。

4:Spark Client 和 Spark Cluster的區別

        理解YARN-Client和YARN-Cluster深層次的區別之前先清楚一個概念:Application Master。在YARN中,每個Application實例都有一個ApplicationMaster進程,它是Application啓動的第一個容器。它負責和ResourceManager打交道並請求資源,獲取資源之後告訴NodeManager爲其啓動Container。從深層次的含義講YARN-Cluster和YARN-Client模式的區別其實就是ApplicationMaster進程的區別。

  • YARN-Cluster模式下,Driver運行在AM(Application Master)中,它負責向YARN申請資源,並監督作業的運行狀況。當用戶提交了作業之後,就可以關掉Client,作業會繼續在YARN上運行,因而YARN-Cluster模式不適合運行交互類型的作業;
  • YARN-Client模式下,Application Master僅僅向YARN請求Executor,Client會和請求的Container通信來調度他們工作,也就是說Client不能離開。

                

發佈了25 篇原創文章 · 獲贊 14 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章