hadoop基礎(三)—YARN的架構

YARN概述

Yarn本來只是MapReduce的一部分,後來變成了Hadoop一個獨立的項目
概括來說,Hadoop YARN的目的是使得Hadoop數據處理能力超越MapReduce。衆所周知,Hadoop HDFS是Hadoop的數據存儲層,Hadoop MapReduce是數據處理層。然而,MapReduce已經不能滿足今天廣泛的數據處理需求,如實時/準實時計算,圖計算等。而Hadoop YARN提供了一個更加通用的資源管理和分佈式應用框架。在這個框架上,用戶可以根據自己需求,實現定製化的數據處理應用。而Hadoop MapReduce也是YARN上的一個應用。我們將會看到MPI,圖處理,在線服務等(例如Spark,Storm,HBase)都會和Hadoop MapReduce一樣成爲YARN上的應用。下面將分別介紹傳統的Hadoop MapReduce以及新一代Hadoop YARN架構

傳統的Hadoop MapReduce 架構

傳統的Apache Hadoop MapReduce系統由JobTracker和TaskTracker組成。其中JobTracker是master,只有一個;TaskTracker是slaves,每個節點部署一個。架構圖如下:

image

  • job tracker負責:

    • 資源管理

    • 跟蹤資源消耗/可用資源

    • Job生命週期管理(調度Job的每個task,跟蹤狀態,容災等)

  • task tracker負責

    • 依次啓動和停止由JobTracker分配的Task

    • 週期性的向job tracker彙報task的進度和狀態信息

新一代Hadoop YARN

YARN的最基本思想是將JobTracker的兩個主要職責:資源管理和Job調度管理分別交給兩個角色負責。一個是全局的ResourceManager,一個是每個應用一個的ApplicationMaster。ResourceManager以及每個節點一個的NodeManager構成了新的通用系統,實現以分佈式方式管理應用。

  • YARN架構圖

image

  • 基本說明

    • ResouceManager

      每個Hadoop集羣只會有一個ResourceManager(如果是HA的話會存在兩個,但是有且只有一個處於active狀態),它負責管理整個集羣的計算資源,並將這些資源分別給應用程序。ResourceManager 內部主要有兩個組件:

        1.

    • NodeManager

      NodeManager是YARN中每個節點上的代理,它管理Hadoop集羣中單個計算節點,根據相關的設置來啓動容器的。NodeManager會定期向ResourceManager發送心跳信息來更新其健康狀態。同時其也會監督Container的生命週期管理,監控每個Container的資源使用(內存、CPU等)情況,追蹤節點健康狀況,管理日誌和不同應用程序用到的附屬服務(auxiliary service)

    • ApplicationMaster

      ApplicationMaster是應用程序級別的,每個ApplicationMaster管理運行在YARN上的應用程序。YARN 將 ApplicationMaster看做是第三方組件,ApplicationMaster負責和ResourceManager scheduler協商資源,並且和NodeManager通信來運行相應的task。ResourceManager 爲 ApplicationMaster 分配容器,這些容器將會用來運行task。ApplicationMaster 也會追蹤應用程序的狀態,監控容器的運行進度。當容器運行完成, ApplicationMaster 將會向 ResourceManager 註銷這個容器;如果是整個作業運行完成,其也會向 ResourceManager 註銷自己,這樣這些資源就可以分配給其他的應用程序使用了。

    • Container

      Container是與特定節點綁定的,其包含了內存、CPU磁盤等邏輯資源。不過在現在的容器實現中,這些資源只包括了內存和CPU。容器是由 ResourceManager scheduler 服務動態分配的資源構成。容器授予 ApplicationMaster 使用特定主機的特定數量資源的權限。ApplicationMaster 也是在容器中運行的,其在應用程序分配的第一個容器中運行

YARN的優點

  • 可擴展性

    • MapReduce 1 最多可支持4000個節點的集羣.因爲JobTracker負責的職責太多而成爲瓶頸
    • Yarn 可以支持10000個節點,並行100000個task.
  • 可靠性

    • Yarn的ResourceManager職責很簡單,很容易實現HA;
    • MapReduce 1 的JobTracker的狀態變化非常迅速(想象下每個Task過幾秒都會想它報告狀態). 這使得JotTracker很難實現HA(高可用性).通常HA都是通過備份當前系統的狀態然後當系統失敗備用系統用備份的狀態來繼續工作.
  • 並行性

    • MapReduce 1只能運行MapReduce應用
    • Yarn最大的好處之一就是職稱很多其他類型的分佈式Application. 如下圖:
      image

YARN運行機制

  • 流程圖
    image

  • 流程說明:

    1. Client提交一個application,以及必要的specification來啓動ApplicationMaster
    2. ResourceManager敲定一個用來啓動ApplicationMaster的container。然後啓動ApplicationMaster
    3. ApplicationMaster啓動時會向ResourceManager註冊。 註冊後,client可以向ResourceManager查詢ApplicationMaster的詳細信息,並且client可以直接和ApplicationMaster通信。
    4. ApplicationMaster通過resourcerequest 協議來敲定更多的Container資源
    5. ApplicationMaster向NodeManager提供詳細的信息來啓動Container。之後Container可以和ApplicationMaster通信
    6. application會在Container裏面執行,並根據applicaion-specific的協議來向ApplicationMaster報告狀態
    7. 在appliation運行期間,client直接通過application-specific協議來和ApplicationMaster通信去獲取運行狀態以及進展
    8. application結束後,ApplicationMater會向ResourceManager註銷然後釋放資源。

參考地址


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章