1. 程式人生 > >hadoop系列之yarn

hadoop系列之yarn

YARN

    1. YARN概述

YARN,即 Yet Another Resource Negotiator 的縮寫, 它是 Hadoop 資源管理系統,是在 Hadoop2 以後引入的。它在整個 Hadoop 中的位置如下:

    1. YARN MapReduce1

MapReduce1 指 Hadoop1.x 中的 MapReduce 分散式執行框架,用以區別使用了 YARN 的 MapReduce2。

      1. MapReduce1的機制

MapReduce1 由兩類守護程序來控制作業的執行:一個 jobtracker 以及一個或多個 tasktracker。jobtracker 通過排程 tasktracker 上執行的任務來協調所有執行在系統上的作業。同時,tasktracker 在執行任務的同時會將執行進度上報給 jobtracker。

從上面的描述中可以看到,jobtracker 同時負責任務排程和進度監控。而在 YARN 架構中,這些職責是由不同的實體承擔的。

      1. YARNMapReduce1對比
        1. 可擴充套件性

由於 MapReduce1 總的 jobtracker 必須同時管理作業排程和任務跟蹤,當叢集的規模超過一定程度(比如節點數超過 4000,任務數超過 40000),MapReduce1 就會遇到擴充套件瓶頸。而在 YARN 中,作業排程由

ResourceManager 負責,任務的跟蹤由 NodeManager 中的 Application Master 負責。YARN 利用資源管理器與

Application Master 分離的架構解決 了這個侷限,可以擴充套件到近 10000 個節點和 100000 個任務。

        1. 可用性

由於 MapReduce1 中的 jobtracker 記憶體中包含大量快速變化的負責狀態(比如任務的執行狀態),這使得改進

jobtracker 讓其具有高可用非常困難。

但 YARN 中將作業排程和跟蹤職責劃分之後,就變成了分別對資源管理器和 YARN 應用的高可用,而對

ResourceManager 高可用和 YARN 應用的高可用要容易得多。後面分別會有詳細介紹。

        1. 利用率

MapReduce1 中為每個 tasktracker 分別的 slot 是固定長度的,而且區分了 map slot 和 reduce slot,這會導致兩者任務不匹配的時候,其中的一類 slot 空閒,利用率不足。

而 YARN 中,一個節點管理器管理一個資源池,而不是固定數目的 slot。不會出現 MapReduce1 中的情況。

        1. 多租戶

YARN 不僅僅適用於 MapReduce,它對外開放了 Hadoop,可以在 YARN 上執行包括 MapReduce1、

MapReduce2 以及其他應用,如 Spark 等。

    1. YARN解析
      1. 架構剖析

YARN 按功能可分為資源管理器和任務的排程與監控,並將它們分別納入兩個獨立的守護程序。基本思想為一個全域性的 ResourceManager 和每個應用節點執行一個 NodeManager。

ResourceManager 全權負責整個叢集的資源管理,而每個節點上的 NodeManager 則負責容器、監控該節點資源的使用並將它們報告給 ResourceManager 節點。

ResourceManager 包含兩個元件:即 Scheduler 和 ApplicationsManager。

Scheduler 負責資源的排程,它是可插拔的,比如支援 CapacityScheduler,FairScheduler 等。

ApplicationsManager 負責接受作業請求,協商第一個 Container 來啟動應用特定 ApplicationMaster,並負責在

ApplicationMaster 失敗的時候重啟。

每個應用會有一個 ApplicationMaster,它負責向 ResourceManager 的 Scheduler 申請資源,並跟蹤作業的狀態和監控整個過程。

      1. 工作機制

YARN 的工作機制

YARN 作業的工作流程:

第一步:MapReduce 客戶端程式中的 main 中執行 runjob,開始作業;

第二步:客戶端程式向 RM 傳送作業請求同時 RM 將作業 id 以及存放 jar 包的 hdfs 目錄返回給客戶端;

第三步:客戶端會把切片資訊、job 的配置資訊以及 jar 包上傳到上一步收到的 hdfs 目錄下(三個檔案分別為

job.split、job.xml、jar 包);

第四步:客戶端應用提交給 RM;

第五步:RM 將其放入排程器,尋找一個空閒的 NM 建立第一個 Container 容器,並啟動 MRAppMaster 程序;

第六步:NM 通過心跳機制接受排程器分配的任務,初始化一個 job;

第七步:MRAppMaster 從 HDSF 中獲取需要的資料,如分片資訊。這些資料在第三步中存入;

第八步:MRAppMaster 向 RM 申請執行 job 所需的資源,RM 選擇一個擁有相應資源的 NM 返回; 第九步:MRAppMaster 告知選中的 NM,啟動一個 YarnChild Container 容器;

第十步:YarnChild 從 HDFS 中獲取執行 map 和 reduce 任務所需的資源; 第十一步:YarnChild 執行 MapTask 或者 Reduce Task

      1. 內建排程器
        1. FIFO排程器

FIFO 為 First Input First Output 的縮寫,先進先出。FIFO 排程器將應用放在一個佇列中,按照先後順序執行應用。這種策略較為簡單,但不適合共享叢集,因為大的應用會佔用叢集的所有資源,每個應用必須等待直到輪到自己。

        1. 容量排程器容量排程器 Capacity

        1. 公平排程器

公平排程器的目的就是為所有執行的應用公平分配資源。

    1. YARNHA
      1. YARNHA架構

YARN HA 主要是為了解決 YARN 中的 ResourceManager 的單點故障。ResourceManager 的 HA 是通過主備

(Active/Standby)方案來實現。

在任何時候,都只有一個 ResourceManager 是 Active 的,另外一個處於 Standby 狀態,一旦 Active 節點出現故障,隨時準備接管 Active 節點。主備的切換通常由管理員發起的命令或者整合的 failover-controller 來觸發。

YARN HA 架構圖

      1. 主備切換

手動切換/自動切換相關配置涉及 yarn-site.xml 中的 yarn.resourcemanager.ha.automatic-failover.enabled 配置項。預設情況下,當 yarn.resourcemanager.ha.enabled 為 true 的時候它就為 true。