Hadoop——Yarn
Hadoop——Yarn
1. Yarn功能介紹:
yarn為hadoop的分散式叢集資源管理系統,市hadoop2.0的一特性。其特點為
1、支援非mapreduce應用的需求
2、可擴充套件性
3、提高資源是用率
4、使用者敏捷性
5、可以通過搭建為高可用
2.Yarn組成部分:
-
ResourceManger
ResourceManger用來主要有兩個功能。一個是任務分配,一個是資源排程。其中ApplicitionManager執行任務分配,Scheduler來進行資源分配。根據客戶端程式的需求,排程優先順序以及可用資源情況,動態分配特定節點執行應用程式。與NodeManager和ApplicationMaster相互協調工作。- Schedulor
Schedulor在ResourceManger中屬於純排程器,負責各個執行中的應用的資源分配,受到資源容量,佇列以及其他因素的影響。不負責應用程式的監控和狀態追蹤,不保證應用程式的失敗或者硬體失敗的情況對task重啟,而是基於應用程式的資源需求執行其排程功能,使用了叫做資源container的概念,其中包括多種資源,比如,cpu,記憶體,磁碟,網路等。 - ApplicationManager
ApplicationManager用來接收客戶端Client提交的job,找到合適的NodeManager啟動ApplicationMaster,負責監控ApplicationMaster,遇到錯誤時,重啟ApplicationMaster執行的Container。
- Schedulor
-
NodeManager
NodeManager是yarn節點的一個工作程序代理,主要與ResourceManager保持通訊,負責啟動和管理Container,監聽Container的資源使用情況,管理日誌,報告給ResourceManger。
NodeManager啟動時,向ResourceManger註冊,傳送心跳包來等待任務分配,接收到指令後啟動Container應用程式,NodeManager只負責管理Container,並不清楚具體的處理細節。NodeManager與ResourceManger直接會一直保持聯絡,更新Container應用資訊。
主要職責:
1、接收ResourceManager的請求,分配Container給應用的某個任務
3、管理每個Container的生命週期
4、管理每個節點上的日誌
5、執行Yarn上面應用的一些額外的服務,比如MapReduce的shuffle過程- Container
Container是Yarn框架的計算單元,是具體執行應用task(如map task、reduce task)的基本單位。一個NodeManager中可以啟動多個Container,一個Container只會存在與一個NodeManager,不會跨節點計算。
一個Container即從ResourceManager中Schedulor排程過來的已分配的cpu和記憶體,由NodeManager監控。
ApplicationMaster即為第一個Container。ApplicationMaster會與ResourceManager協調,根據需求申請新增多個Container,在任務進行過程中也可以動態釋放和申請Container。
- Container
-
ApplicationMaster
ApplicationMaster是協調叢集中應用程式執行的程序。可以監控Container的執行進度。每個Client對應一個ApplicationMaster來分配Container。
ApplicationMaster負責與ResourceManager協商資源(container)和NodeManager協同工作來執行和監控任務 。
3.Yarn框架作業流程:
- 客戶端Client向ResourceManager提交job請求,並請求一個AppMaster例項
- ResourceManager向其中一個NodeManager傳送AppMaster請求,包含各種資源資訊,並建立例項,並建立ApplicationMaster的RPC埠和用於跟蹤的URL,用來監控應用程式的狀態
- ApplicationMaster向ResourceManager進行註冊,註冊之後客戶端就可以查詢ResourceManager獲得自己ApplicationMaster的詳細資訊,以後就可以和自己的ApplicationMaster直接互動了。在註冊響應中,ResourceManager會發送關於叢集最大和最小容量資訊
- 在平常操作中,ApplicationMaster根據resource-request協議向ResourceManager傳送resource-request請求,ResourceManager會根據排程策略儘可能最優的為ApplicationMaster分配Container資源,作為資源請求的應答發個ApplicationMaster
- ApplicationMaster會與NodeManager進行通訊,讓NodeManager來啟動Container,並配合NodeManager對Container進行監控。ResourceManager不參與Container的監控,ResourceManager可以命令NodeManager殺死Container
- 應用程式的程式碼在啟動的Container中執行,並把執行的進度、狀態等資訊通過application-specific協議傳送給ApplicationMaster,隨著作業的執行,ApplicationMaster將心跳和進度資訊發給ResourceManager,在這些心跳資訊中,ApplicationMaster還可以請求和釋放一些container。
- 在應用程式執行期間,提交應用的客戶端主動和ApplicationMaster交流獲得應用的執行狀態、進度更新等資訊,交流的協議也是application-specific協議
- 一但應用程式執行完成並且所有相關工作也已經完成,ApplicationMaster向ResourceManager取消註冊然後關閉,用到所有的Container也歸還給系統,當container被殺死或者回收,Resourcemanager都會通知NodeManager聚合日誌並清理container專用的檔案。