Hadoop on Yarn 各組件詳細原理


  運行在獨立的節點上的ResourceManager和NodeManager一起組成了yarn的核心,構建了整個平台。ApplicationMaster和相應的container一起組成了一個Yarn的應用系統。

  ResourceManager提供應用程序的調度,每個應用程序由一個ApplicationMaster管理,以Container的形式請求每個任務的計算資源。Container由ResourceMangaer調度,由每個節點的NodeManager上進行本地的管理。

ResourceManager 組件

  弄了一個大大的ResourceManager,醒目吧哈哈- -,扯淡到此為止,ResourceManager是Master,仲裁集群所有的可用資源,從而幫助管理運行在Yarn平台上的分布式應用程序。與其他組建的協作包括:接收ApplicationMaster的資源請求,每個節點的NodeManager從ResourceManager中獲取指令,管理單個節點上的可用資源。(ApplicationMaster的職責就是向ResourceManager申請資源並且和NodeManager一起工作、啟動、監控和停止Container。

一、客戶端和ResourceManager交互

  這里細說Client端的話,ResourceManager主要是通過Client Service、Admininistration Service、Application ACL Manager ResourceManager Web Application及Web Service組件與客戶端交互。

  1、Client Service  

  這個服務實現了基本的客戶端ResourceManager的接口ApplicationClientProtocol.該組件處理所有來自客戶端到ResourceManager的遠程過程調用(RPC)通信。包括:應用程序提交、應用程序終止、獲取應用程序,隊列,集群統計,用戶ACL及更多信息。在安全模式下,Client Service確保所來自用戶的請求都已經認證過(比如通過Kerberos),對於不能直接通過Kerberos認證的客戶端,ClientRMService也提供了API,包括ResourceManager代理令牌,代理令牌是Kerberos認證客戶端的一種特殊對象,能夠第一次安全的與ResourceManager通信並傳遞給它自己額非認證的進程。

  2、Administration Service

  既然Client Service是負責處理一般用戶應用程序的提交或終止,為了確保管理員的請求不會被一般用戶的請求餓死,提供了搞優先級的操作命令,這里就多分離出了一個接口供管理員使用。通過ResourceManagerAdministrationProtocol來實現的通信協議。包含的主要操作有:刷新隊列重新分配隊列或改變隊列的屬性刷新ResourceManager處理的節點列表,例如:增加新安裝的節點或退役現有節點等。

  3、Application ACL Manager

  類似客戶端和管理員等的請求這樣面向用戶的API,ResourceManager可以通過設置配置屬性yarn.acl.enable為true來啟動應用程序的ACL。查看訪問的ACL決定誰可以通過RPC接口查看一些貨所有應用程序的相關細節,WEB UI服務及WEB服務,修改的ACL決定着哪些用戶可以"修改"應用程序(殺死程序等)

  當相同的ACL信息傳遞給ApplicationMaster,這樣ApplicationMaster可以使用該信息讓用戶訪問ApplicationMaster內部運行的一些服務,作為ContainerLaunchContext的一部分,當拉起一個容器時NodeManager也接收相同的ACL信息,然后使用它們控制針對應用程序/container的請求,主要包括它們的狀態、應用日志等。

  4、ResourceManager Web Application 和 Web Service

  這個就是ResourceManager的一個web應用程序來輸出集群的狀態信息、指標、節點活躍列表等,指向ApplicationMaster Web接口的超鏈接及一個調度的專用接口。(就是我們在集群配置中加入的web.address)

二、應用程序與ResourceManager的通信

  一旦應用程序通過ResourceManager中的面向客戶端的服務,它就會穿過ResourceManager的內部,負責拉起ApplicationMaster的狀態機。主要包括以下幾個通信方面:

  1、ApplicationMaster Service

  該組件相應所有來自ApplicationMaster的請求,實現了ApplicationMasterProtocol協議,這是ApplicationMaster與ResourceManager通信的唯一協議。主要包括以下任務:注冊新的ApplicationMaster來自任意正在結束的ApplicationMaster的終止/取消注冊請求認證來自不同ApplicaitonMaster的所有請求確保合法的ApplicationMaster發送的請求傳遞給ResourceManager中的應用程序對象、獲取來自所有運行ApplicationMaster的Container的分配和釋放請求、異步的轉發給Yarn調度器.

  ApplicaitonMaster Service確保了任意時間點、任意ApplicaitionMaster只有一個線程可以發送請求給ResourceManager,因為在ResourceManager上所有來自ApplicaitonMaster的RPC請求都串行化了。

  2、ApplicationMaster 存活監控

  這個監控器跟蹤每個ApplicationMaster以及它的最后的心跳時間。可在配置文件中配置時間,在配置時間內沒有產生心跳的ApplicationMaster會被標記為死亡,ResourceManager會重新調度這個應用程序,在一個新的container上運行一個新的ApplicaitonMaster實例,默認情況下,最多允許兩次這樣的嘗試。

三、節點和ResourceManager 通信

  下列是ResourceManager的組件和運行在集群節點上的NodeManager進行通信。

  1、ResourceManager Tracker Service

  NodeManager發送心跳給ResourceManager,ResourceManager的該組件負責相應來自所有節點的RPC。實現了ResourceTracker接口與所有NodeManager的通信。主要負責:注冊新節點接收前面注冊節點的心跳確保合法的節點可以和ResourceManager通信。Reource Tracker Service轉發一個合法的心跳給YARN調度器,YARN調度器隨后根據節點的空閑資源及不同應用程序的資源請求做調度決定。

  2、NodeManagers 存活監控

  為跟蹤活躍的節點和確定已死的節點,該組件跟蹤每一個節點的標識符(ID)和它最后的心跳時間。

  3、Nodes-List Manager

  是在ResourceManager內存中的一個集合,包括有效節點和被排除的節點。它也跟蹤由管理員明確退役的節點。

 

 

ApplicationMaster 組件

  ApplicationMaster負責管理已提交的應用程序的集合。在應用程序提交后,首先檢查其合法性,然后,確定沒有其他已提交的應用程序已經使用相同的ID.該組件還負責記錄和管理已結束的應用程序,過段時間才會從ResourceManager的內存中清除。

一、ApplicationMaster Launcher

  在Yarn中,每一個其他類型的Container的拉起都是由ApplicationMaster發起的,ApplicationMaster本身的Container是由ResourceManager申請,並在NodeManager上准備和拉起的。該組件維護一個線程池來設置環境,且和NodeManager通信來拉起新提交應用程序的ApplicationMaster,或者因為某些原因失敗的先前應用程序實例所失敗的ApplicationMaster。它也在以應用程序正常結束或者要強行終止時,負責告訴NodeManager來清理ApplicaitonMaster。(殺掉相應進程)

二、YarnScheduler

  Yarn調度器負責給正在運行的應用程序分配資源,這些應用程序受到容量、隊列等各方面的限制。

三、ContainerAllocationExpirer

  該組件負責確保所有分配的Container最終被ApplicationMaster使用,並在相應的NodeManager上拉起。

 

 

NodeManager 組件

  NodeManager接受來自ApplicationMaster的啟動或停止Container的請求,管理Container是NodeManager的核心功能。在真正拉起一個Container之前,NodeManager會將所有需要的庫文件下載到本地,包括數據文件,可執行文件、tarball、JAR文件,shell腳本等待。這樣下載好的庫文件可以通過本地應用級別緩存被同一應用的多個Container共享

  NodeManager內部也可以划分為一些列嵌套組件,卧槽好多啊。。。

一、NodeStatusUpdater

   在NodeManager剛啟動時,NodeStatusUpdater組件會向ResourceManager注冊,發送本節點的可用資源,以及NodeManager的Web server和RPC Server的監聽端口。ResourceManager在注冊過程中,向NodeManager發出安全相關的key,NodeManager將用這個KEY作為ApplicationMaster的Container請求做認證。

、ContainerManager

  是NodeManager的核心管理組件。其中也包含許多子組件:RPC Server資源本地化服務PUBLIC資源的本地化等等。

具體組件就不一一列舉了。。。。太多了。。。。。。。

 

整個作業大體總體運行流程:

1、應用程序提交給ResourceManager。

2、ApplicationMaster啟動,並向ResourceManager注冊。

3、ApplicationMaster向ResourceManager請求Container執行實際的工作。

4、ApplicationMaster將從ResourceManager分配的Container信息(包括各種資源配置啊等信息)傳遞給NodeManager啟動。

5、隨之,計算過程在Container中進行,這些Container將與ApplicationMaster保持通信,發送心跳等告知任務過程。

6、當應用程序完成后,Container被停止,ApplicationMaster從ResourceManager中注銷。

 

 

  


免責聲明!

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



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