Spark on Yarn 解惑

一:Hadoop Yarn解析

         1,Yarn是Hadoop推出整個分佈式(大數據)集羣的資源管理器,負責資源的管理和分配,基於Yarn我們可以在同一個大數據集羣上同時運行多個計算框架,例如Spark、MapReduce、Storm等;

         2,Yarn基本工作流程如下圖所示:

Spark <wbr>on <wbr>Yarn徹底解密
 

         注意:Container要向NodeManager彙報資源信息,Container要向App Mstr彙報計算信息;

         3,客戶端Client向ResourceManager提交Application,ResourceManager接受應用並根據集羣資源狀況決定在某個具體Node上來啓動當前提交的應用程序的任務調度器Driver(ApplicationMaster),決定後ResourceManager會命令具體的某個Node上的資源管理器NodeManager來啓動一個新的JVM進程運行程序的Driver部分,當ApplicationMaster啓動的時候(會首先向ResourceManager註冊來說明自己負責當前程序的運行)會下載當前Application相關的Jar等各種資源並基於此決定具體向ResourceManager申請資源的具體內容,ResourceManager接受到ApplicationMaster的資源分配的請求之後會最大化的滿足資源分配的請求併發送資源的元數據信息給ApplicationMaster,ApplicationMaster收到資源的元數據信息後會根據元數據信息發指令給具體機器上的NodeManager讓NodeManager來啓動具體的Container,Container在啓動後必須向AppplicationMaster註冊,當ApplicationMaster獲得了用於計算的Containers後,開始進行任務的調度和計算,直到作業執行完成。需要補充說的是,如果ResourceManager第一次沒有能夠完全完成ApplicationMaster分配的資源的請求,後續ResourceManager發現集羣中有新的可用資源時候,會主動向ApplicationMaster發送新的可用資源的元數據信息以提供更多的資源用於當前程序的運行!

         補充說明:

1,           如果是Hadoop的MapReduce計算的話Container不可以複用,如果是Spark on Yarn的話Container;

2,           Container具體的銷燬是由ApplicationMaster來決定的;ApplicationMaster 發指令給NodeManager讓NM銷燬Container

 

        

二:Spark on Yarn的兩種運行模式實戰:此時不需要啓動Spark集羣,只需要啓動Yarn即可!Yarn的ResourceManager就相當於Spark Standalone模式下的Master

1,Spark on Yarn的兩種運行模式:唯一的決定因素是當前Application從任務調度器Driver運行在什麼地方!

a)       Cluster:Driver運行的Yarn集羣下的某臺機器上的JVM進程中!!!

b)       Client:Driver運行在當前提交程序的客戶機器上,

需要說明的是:無論是什麼模式,只要當前機器運行了Spark代碼,就必須安裝Spark!

2,Spark on Yarn的運行實戰:

a)       Client模式:方便在命令終端直接看到運行的過程信息,尤其方便做測試使用,例如:./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000

 

Spark天機解密:Standalone模式下啓動Spark集羣(也就是啓動Master和Worker)其實啓動的是資源管理器,真正作業計算的時候和集羣資源管理器沒有任何關係,所以Spark的Job真正執行作業的時候不是運行在你啓動的Spark集羣中的,而是運行在一個個JVM中的,只要在JVM所在的機器上安裝配置了Spark即可!!!

 

3,Spark on Yarn模式下Driver和ApplicationMaster的關係;

a)       Cluster:Driver位於ApplicationMaster進程中,我們需要通過Hadoop默認指定的8088端口來通過Web控制檯查看當前的Spark程序運行的信息,例如進度、資源的使用;

b)       Client:Driver爲提交代碼的機器上,此時ApplicationMaster依舊位於集羣中且只負責資源的申請和launchExecutor,此時啓動後的Eexcutor並不會向ApplicationMaster進程註冊,而是想Driver註冊!!!

 

三:最佳實踐

         1,Spark on Yarn的模式下 Hadoop Yarn的配置yarn.nodemanager.local-dirs會覆蓋Spark

  spark.local.dir!!!

         2,在實際生產環境下一般都是採用Cluster,我們會通過History Server來獲取最終全部的運行信息;

         3,如果想直接看運行的日誌信息,可以使用以下命令:yarn logs -applicationId

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章