寫在前面。本文并未具體描述YARN的使用細節(jié)寥殖,而是從YARN出現(xiàn)的背景慈参、解決什么問題、怎么解決這些問題的角度出發(fā)刮萌,希望幫助已經(jīng)使用YARN的驮配、剛接觸YARN的讀者更好的了解YARN。
Hadoop
對于大數(shù)據(jù)的處理着茸,Hadoop儼然已是業(yè)界認可壮锻、成熟的數(shù)據(jù)存儲、處理框架涮阔。目前猜绣,Hadoop經(jīng)歷主要經(jīng)歷了兩個版本。在Hadoop v2.0的版本中敬特,YARN被引入掰邢,YARN的引入主要是解決了Hadoop v1.0中的一些問題(在下文中將主要探討)。
YARN要解決什么問題伟阔?
在Hadoop v1.0的框架中辣之,對數(shù)據(jù)的處理、資源調度主要依賴MapReduce完成皱炉,具體過程如下所示:
從以上圖中怀估,我們可以了解到Hadoop v1.0的數(shù)據(jù)處理方式。在小規(guī)模的數(shù)據(jù)處理過程中,這套方法沒有太大問題多搀。但是歧蕉,在真實的場景中往往需要處理大量數(shù)據(jù),這套方法便會遇到以下問題:
由于大量的數(shù)據(jù)處理Job提交給Job Tracker康铭,且Job Tracker需要協(xié)調的Data Node可能有數(shù)千臺惯退,Job Tracker極易成為整個系統(tǒng)的性能、可用的瓶頸麻削。
無法有效地調配資源蒸痹,導致資源分配不均。如以下例子呛哟,假設有3臺Data Node(DN)叠荠,每個DN的內存為4GB。用戶提交了6個Job扫责,每個Job需要1GB內存進行處理榛鼎,且數(shù)據(jù)均在DN#2上。由于DN#2只有4GB內存鳖孤,所以Job#1-4在DN#2上運行者娱,Job#5和#6則在排隊等待。但是苏揣,此時DN#1和#3均在閑置的狀態(tài)下黄鳍,而未能有效的被利用。
- 只能接受MapReduce的方式平匈,且技術棧僅為Java框沟。
YARN的解決方案
基于上述問題,Hadoop在2.0版本上推出了YARN (Yet Another Resource Negotiator)增炭。YARN的核心思想是將資源管理和Job的調度/監(jiān)控進行分離忍燥。YARN的架構如下圖所示。
YARN的核心組件可以分為兩大部分:
-
全局組件
- Resource Manager: 作為全局統(tǒng)一的資源管理隙姿、調度梅垄、分配。Resource Manager由Scheduler和Applicatio Manager組成输玷。Scheduler根據(jù)節(jié)點的容量队丝、隊列情況,為Application分配資源饲嗽;Application Manager接受用戶提交的請求炭玫,在節(jié)點中啟動Application Master,并監(jiān)控Application Master的狀態(tài)貌虾、進行必要的重啟吞加。
- Node Manager: 在每一個節(jié)點上都有一個Node Manager作為代理監(jiān)控節(jié)點的資源使用情況(cpu, memory, disk, network)并向Resource Manager上報節(jié)點狀態(tài)。
-
Per-applicaiton組件
- Application Master: 負責數(shù)據(jù)處理job的執(zhí)行調度。Application Master與Resource Manager進行溝通衔憨,獲取資源進行計算叶圃。得到資源后,與節(jié)點上的Node Manager進行溝通践图,在分配的Container匯總執(zhí)行任務掺冠,并監(jiān)控任務執(zhí)行的情況。
- Container: 資源的一種抽象方式码党,它封裝了某個節(jié)點上的多維度資源德崭,如內存、CPU揖盘、磁盤眉厨、網(wǎng)絡等,當Application Master向Resource Manager申請資源時兽狭,Resource Manager為Application Master返回的資源便是Container憾股。
當YARN接受用戶提交的Job時,其工作過程為:
YARN通過以下方式箕慧,解決了上述問題服球。
通過Application Master來解決Job Tracker的瓶頸問題。每當新的job提交進來后颠焦,Resource Manager會在恰當?shù)墓?jié)點啟動一個新的Application Master斩熊,從而避免在Hadoop v1.0中Job Tracker成為性能瓶頸的尷尬。
更有效的進行資源的調度伐庭。Resource Manager可以為Application Master分配空余的資源座享,幫忙Application Master完成任務。
支持MapReduce以外的數(shù)據(jù)處理方式似忧,例如:Spark等。
YARN的一些問題
即便Hadoop v2.0應用來YARN的設計思路丈秩,也仍有一個難題:當大量的job提交盯捌、用盡所有計算資源后,新的job要等待很久才能被處理蘑秽,即便新的job是非常重要的任務饺著,也只能等待。在YARN中肠牲,通過scheduler plugin(例如:FIFO Scheduler幼衰、Fair Scheduler、Capacity Scheduler)的方式缀雳,配置不同的資源調度規(guī)則渡嚣,來盡量緩解該問題,讓重要的job可以優(yōu)先獲得資源調配。
Reference
- Apache Hadoop YARN - https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
- Yarn Tutorial for Beginners - https://www.youtube.com/watch?v=nmaA5_d4E8c&t=0s&list=LL91Ldd6Q_h4q8D04sWs5Qpw&index=4
- Hadoop 新 MapReduce 框架 Yarn 詳解 - https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
- Getting Started with Hadoop 2.0 - http://www.tomsitpro.com/articles/hadoop-2-vs-1,2-718.html
- Hadoop Tutorial - The YARN - https://www.youtube.com/watch?v=DMHf_xiSSgA
pstrike 2018.08.31 于深圳
【尊重版權:轉載之前請先聯(lián)系我】