Hadoop——Yarn

Hadoop——Yarn

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。
  • NodeManager
      NodeManager是yarn節點的一個工作進程代理,主要與ResourceManager保持通信,負責啓動和管理Container,監聽Container的資源使用情況,管理日誌,報告給ResourceManger。
      NodeManager啓動時,向ResourceManger註冊,發送心跳包來等待任務分配,接收到指令後啓動Container應用程序,NodeManager只負責管理Container,並不清楚具體的處理細節。NodeManager與ResourceManger直接會一直保持聯繫,更新Container應用信息。
    主要職責:
      1、接收ResourceManager的請求,分配Container給應用的某個任務
      2、和ResourceManager交換信息以確保整個集羣平穩運行。ResourceManager就是通過收集每個NodeManager的報告信息來追蹤整個集羣健康狀態的,而NodeManager負責監控自身的健康狀態。
      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。
  • ApplicationMaster
       ApplicationMaster是協調集羣中應用程序執行的進程。可以監控Container的執行進度。每個Client對應一個ApplicationMaster來分配Container。
       ApplicationMaster負責與ResourceManager協商資源(container)和NodeManager協同工作來執行和監控任務 。

3.Yarn框架作業流程:

在這裏插入圖片描述

  1. 客戶端Client向ResourceManager提交job請求,並請求一個AppMaster實例
  2. ResourceManager向其中一個NodeManager發送AppMaster請求,包含各種資源信息,並創建實例,並建立ApplicationMaster的RPC端口和用於跟蹤的URL,用來監控應用程序的狀態
  3. ApplicationMaster向ResourceManager進行註冊,註冊之後客戶端就可以查詢ResourceManager獲得自己ApplicationMaster的詳細信息,以後就可以和自己的ApplicationMaster直接交互了。在註冊響應中,ResourceManager會發送關於集羣最大和最小容量信息
  4. 在平常操作中,ApplicationMaster根據resource-request協議向ResourceManager發送resource-request請求,ResourceManager會根據調度策略儘可能最優的爲ApplicationMaster分配Container資源,作爲資源請求的應答發個ApplicationMaster
  5. ApplicationMaster會與NodeManager進行通訊,讓NodeManager來啓動Container,並配合NodeManager對Container進行監控。ResourceManager不參與Container的監控,ResourceManager可以命令NodeManager殺死Container
  6. 應用程序的代碼在啓動的Container中運行,並把運行的進度、狀態等信息通過application-specific協議發送給ApplicationMaster,隨着作業的執行,ApplicationMaster將心跳和進度信息發給ResourceManager,在這些心跳信息中,ApplicationMaster還可以請求和釋放一些container。
  7. 在應用程序運行期間,提交應用的客戶端主動和ApplicationMaster交流獲得應用的運行狀態、進度更新等信息,交流的協議也是application-specific協議
  8. 一但應用程序執行完成並且所有相關工作也已經完成,ApplicationMaster向ResourceManager取消註冊然後關閉,用到所有的Container也歸還給系統,當container被殺死或者回收,Resourcemanager都會通知NodeManager聚合日誌並清理container專用的文件。

參考:http://www.noobyard.com/article/p-nrbprhib-hm.html