如何在yarn上運行Hello World(一)


1.YARN是什么
YARN  (Yet Another Resource Negotiator,另一種資源協調者) 是hadoop上的一種資源調度器,它是一個通用資源管理系統,可以為上層應用提供統一的資源管理和調度.
 
2.yarn的結構

 

 
YARN的結構是一個典型的主從結構(MASTER/SLAVER)
其中的ResourceManager(簡稱為RM),是一個全局的資源調度器,負責整個系統的資源管理和分配.
然后NodeManager(簡稱為NM),則是每個節點上的資源和任務管理器,他有兩個作用,首先NM會定時的向RM匯報該節點的資源使用情況和每個Container的運行狀態,然后NM還會接收並處理來自AM的要求停止和啟動指定container等各種請求.
 
 
3.如何編寫基於yarn的程序
編寫一個運行於yarn上的應用程序,主要需要編寫兩個組件,YARNClient和ApplicationMaster(簡稱AM).
 
1. YARNClient 運行在用戶端,為用戶和YARN集群上的應用交互提供了一系列的接口.主要作用包括創建應用(Application),申請用於運行AM的Container並提交AM到這個Container進行運行.如果有必要的話,還以通過該YARNClient獲取 AM 在 YARN集群的運行狀態.
2.AM是一個獨立的進程,是每個用戶應用的主進程,作用是協調運行在YARN集群中的應用程序的執行狀況,主要包括 和RM協商資源,並且配合NM一起工作來啟動並跟蹤Container的運行情況,並根據運行情況對用戶程序作出對應的調整.
 
假如我們要在YARN集群上運行一個簡單的java程序(輸出一句 hello world),那么程序結構一般如下圖所示.
 

 

 
如上圖所示, 其中:
1. AM.jar 表示 應用的 Application Master 的jar包
2.HelloWorld.jar 表示包含輸出的 HelloWorld 的類的jar包,這個jar包里面實際上是一個HelloWorld類,核心內容就是一個主函數,運行后輸出一句Hello World
3.在應用提交運行前,我們事先將 AM.jar 和 HelloWorld.jar 上傳到 HDFS 存儲,用來方便之后來使用.
4.YARNClient 提供了用戶和YARN集群進行交互的接口,實際上 YARNClient 並不能算作YARN集群中一個獨立的模塊,只是提供個類 YarnClient,用戶可以在自己的應用中調用 YarnClient 類來和YARN集群進行交互.
5.Container(AM) 表示YARN集群上用來運行 AM的進程(作為YARN集群中的一個抽象概念-container)
6.Container(HelloWorld) 表示YARN集群上真正運行的用戶程序(我們用HelloWorld來表示一個普通的用戶程序)的進程,其中Container(HelloWorld) 和 Container(AM) 可能在同一個NM進程下,也可能分配給不同的NM,這主要決定於RM的分配策略.
 
 
用戶提交一個基於yarn的應用程序,也就是YarnClient 運行流程如下:
 
1.用戶事先要將使用的 AM.jar 和 HelloWorld.jar 打包上傳到hdfs
2.用戶在客戶端實例化 YarnConfiguration對象
3. 初始化並運行YarnClient
4.為了新的應用程序 得到一個 YarnClientApplication 對象
5.獲取提交應用的上下文對象,並且可以使用這個上下文對象設置AM的一些運行情況
6.獲取 新應用在YARN集群的唯一標識
7.設置應用的名字,這個名字會在yarn的web頁面體現出來
8.設置該應用對應的AM的jar為 LocalResource,以供 AM Container啟動時獲取.需要注意的是為了方便讀取 am.jar 一般會存儲在hdfs上
其中:
設置資源類型為file,這樣這個文件會在不會被解壓的情況下直接復制到 container的對應目錄
設置資源的可見性為LocalResourceVisibility.APPLICATION,表示只有這個應用可以訪問該資源,當應用運行停止后這個資源會被NM自動刪除
9.將啟動container需要的資源描述設置到對應的 container上下文中,以備后面使用

 

10 設置啟動AM需要的環境變量,其中我們只配置了classPath,具體使用中可以根據實際情況設置其他的環境變量,例如JAVA_HOME,PATH等
11 設置啟動AM的命令,我們這里就是設置了 用java命令啟動 AM.jar的 包含主函數的類,並傳入相關參數進行啟動
12.設置 啟動應用 的一些必要信息
13. 向YARN集群提交運行應用,提交的過程會阻塞,直到RM返回改應用的狀態為ACCEPTED或者失敗.
14,該步驟為可選項,即可以堵塞client端程序,直到應用運行結束或者異常退出等情況發生

 

到此為止,我們就初步完成了一個最簡單的提交yarn應用程序的client示例代碼
后面則是YARN集群接收到啟動AM的請求后,為其分配 AM Container ,然后啟動AM進程並運行.
我們會在后面的文章詳細描述如何編寫一個應用的AM程序,敬請期待.
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM