1. 程式人生 > 其它 >Hadoop入門學習筆記(二)

Hadoop入門學習筆記(二)

Yarn學習

YARN簡介

YARN是一個通用資源管理系統和排程平臺,可為上層應用提供統一的資源管理和排程

YARN功能說明

  • 資源管理系統:叢集的硬體資源,和程式執行相關,比如記憶體、CPU等。
  • 排程平臺:多個程式同時申請計算資源如何分配,排程的規則(演算法)。
  • 通用:不僅僅支援MapReduce程式,理論上支援各種計算程式。YARN不關心你幹什麼,只關心你要資源,在有 的情況下給你,用完之後還我。

即使MapReduce現在不流行了 也可以用別的計算模型來替代 如 spark flink,一定程度上 yarn促進了hadoop的流行。

YARN主要結構

  • ResourceManager(RM) YARN叢集中的主角色,決定系統中所有應用程式之間資源分配的最終許可權,即最終仲裁者。 接收使用者的作業提交,並通過NM分配、管理各個機器上的計算資源。

  • NodeManager(NM) YARN中的從角色,一臺機器上一個,負責管理本機器上的計算資源。 根據RM命令,啟動Container容器、監視容器的資源使用情況。並且向RM主角色彙報資源使用情況。

  • ApplicationMaster(AM) 使用者提交的每個應用程式均包含一個AM。 應用程式內的“老大”,負責程式內部各階段的資源申請,監督程式的執行情況。

核心互動流程

  • MR作業提交 Client-->RM

  • 資源的申請 MrAppMaster-->RM

  • MR作業狀態彙報 Container(Map|Reduce Task)-->Container(MrAppMaster)

  • 節點的狀態彙報 NM-->R

三種排程器

FIFO Scheduler(先進先出排程器)、Capacity Scheduler(容量排程器)、Fair Scheduler(公平排程器)。

FIFO Scheduler概述

  • FIFO Scheduler是Hadoop1.x中JobTracker原有的排程器實現,此排程器在YARN中保留了下來。
  • FIFO Scheduler是一個先進先出的思想,即先提交的應用先執行。排程工作不考慮優先順序和範圍,適用於負載較低 的小規模叢集。當使用大型共享叢集時,它的效率較低且會導致一些問題。
  • FIFO Scheduler擁有一個控制全域性的佇列queue,預設queue名稱為default,該排程器會獲取當前叢集上所有的 資源資訊作用於這個全域性的queue。

FIFO Scheduler優勢、壞處

  • 優勢: 無需配置、先到先得、易於執行
  • 壞處: 任務的優先順序不會變高,因此高優先順序的作業需要等待 不適合共享叢集

Capacity Scheduler概述

  • Capacity Scheduler容量排程是Apache Hadoop3.x預設排程策略。該策略允許多個組織共享整個叢集資源,每個 組織可以獲得叢集的一部分計算能力。通過為每個組織分配專門的佇列,然後再為每個佇列分配一定的叢集資源, 這樣整個叢集就可以通過設定多個佇列的方式給多個組織提供服務了。

  • Capacity可以理解成一個個的資源佇列,這個資源佇列是使用者自己去分配的。佇列內部又可以垂直劃分,這樣一個 組織內部的多個成員就可以共享這個佇列資源了,在一個佇列內部,資源的排程是採用的是先進先出(FIFO)策略

  • Capacity Scheduler排程器以佇列為單位劃分資源。簡單通俗點來說,就是一個個佇列有獨立的資源,佇列的結構 和資源是可以進行配置的。

  • 層次化的佇列設計(Hierarchical Queues) 層次化的管理,可以更容易、更合理分配和限制資源的使用。

  • 容量保證(Capacity Guarantees) 每個佇列上都可以設定一個資源的佔比,保證每個佇列都不會佔用整個叢集的資源。

  • 安全(Security) 每個佇列有嚴格的訪問控制。使用者只能向自己的佇列裡面提交任務,而且不能修改或者訪問其他佇列的任務。

  • 彈性分配(Elasticity) 空閒的資源可以被分配給任何佇列。 當多個隊列出現爭用的時候,則會按照權重比例進行平衡。

Fair Scheduler概述

  • Fair Scheduler叫做公平排程,提供了YARN應用程式公平地共享大型叢集中資源的另一種方式。使所有應用在平 均情況下隨著時間的流逝可以獲得相等的資源份額
  • Fair Scheduler設計目標是為所有的應用分配公平的資源(對公平的定義通過引數來設定)
  • 公平排程可以在多個佇列間工作,允許資源共享和搶佔。

這邊的公平要怎麼理解呢?

我的理解是 不同佇列(使用者)之間是公平的,在一個佇列中的各個任務間也是公平的,而不是誰佇列中的任務多,誰獲得的資源就多。可以理解為,每個家庭分配一樣的糧食,你家有多少人,自己再公平分配。但排程器也可以開啟資源搶佔,當你佇列中的資源閒置,可以允許別的佇列去搶佔,這需要你去開啟相關配置