1. 程式人生 > 實用技巧 >Hadoop——Yarn

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專用的檔案。

參考:https://www.cnblogs.com/zsql/p/11636112.html#_label0