溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hadoop Yarn是什么意思

發(fā)布時間:2022-02-25 10:23:48 來源:億速云 閱讀:176 作者:小新 欄目:web開發(fā)

這篇文章將為大家詳細講解有關Hadoop Yarn是什么意思,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一. Hadoop Yarn 是什么

在古老的 Hadoop1.0 中,MapReduce 的 JobTracker 負責了太多的工作,包括資源調(diào)度,管理眾多的 TaskTracker 等工作。這自然是不合理的,于是 Hadoop 在 1.0 到 2.0 的升級過程中,便將 JobTracker 的資源調(diào)度工作獨立了出來,而這一改動,直接讓 Hadoop 成為大數(shù)據(jù)中最穩(wěn)固的那一塊基石,而這個獨立出來的資源管理框架,就是 Yarn 。

在詳細介紹 Yarn 之前,我們先簡單聊聊 Yarn ,Yarn 的全稱是 Yet Another Resource Negotiator,意思是“另一種資源調(diào)度器”,這種命名和“有間客?!边@種可謂是異曲同工之妙。這里多說一句,以前 Java 有一個項目編譯工具,叫做 Ant,他的命名也是類似的,叫做 “Another Neat Tool”的縮寫,翻譯過來是”另一種整理工具“。

既然都叫做資源調(diào)度器了,那么自然,它的功能也是負責資源管理和調(diào)度的,接下來,我們就深入到 Yarn 這個東西內(nèi)部一探究竟吧。

二. Yarn 架構

我們主要圍繞上面這張圖展開,不過在介紹圖中內(nèi)容時,需要先了解 Yarn 中的 Container 的概念,然后會介紹圖中一個個組件,最后看看提交一個程序的流程。

2.1 Container

容器(Container)這個東西是 Yarn 對資源做的一層抽象。就像我們平時開發(fā)過程中,經(jīng)常需要對底層一些東西進行封裝,只提供給上層一個調(diào)用接口一樣,Yarn 對資源的管理也是用到了這種思想。

如上所示,Yarn 將CPU核數(shù),內(nèi)存這些計算資源都封裝成為一個個的容器(Container)。需要注意兩點:

容器由 NodeManager 啟動和管理,并被它所監(jiān)控。

容器被 ResourceManager 進行調(diào)度。

NodeManager 和 ResourceManager 這兩個組件會在下面講到。

2.2 三個主要組件

再看最上面的圖,我們能直觀發(fā)現(xiàn)的兩個主要的組件是 ResourceManager 和 NodeManager ,但其實還有一個 ApplicationMaster 在圖中沒有直觀顯示。我們分別來看這三個組件。

ResourceManager

我們先來說說上圖中最中央的那個 ResourceManager(RM)。從名字上我們就能知道這個組件是負責資源管理的,整個系統(tǒng)有且只有一個 RM ,來負責資源的調(diào)度。它也包含了兩個主要的組件:定時調(diào)用器(Scheduler)以及應用管理器(ApplicationManager)。

定時調(diào)度器(Scheduler):從本質(zhì)上來說,定時調(diào)度器就是一種策略,或者說一種算法。當 Client 提交一個任務的時候,它會根據(jù)所需要的資源以及當前集群的資源狀況進行分配。注意,它只負責向應用程序分配資源,并不做監(jiān)控以及應用程序的狀態(tài)跟蹤。

應用管理器(ApplicationManager):同樣,聽名字就能大概知道它是干嘛的。應用管理器就是負責管理 Client 用戶提交的應用。上面不是說到定時調(diào)度器(Scheduler)不對用戶提交的程序監(jiān)控嘛,其實啊,監(jiān)控應用的工作正是由應用管理器(ApplicationManager)完成的。

ApplicationMaster

每當 Client 提交一個 Application 時候,就會新建一個 ApplicationMaster 。由這個 ApplicationMaster 去與 ResourceManager 申請容器資源,獲得資源后會將要運行的程序發(fā)送到容器上啟動,然后進行分布式計算。

這里可能有些難以理解,為什么是把運行程序發(fā)送到容器上去運行?如果以傳統(tǒng)的思路來看,是程序運行著不動,然后數(shù)據(jù)進進出出不停流轉。但當數(shù)據(jù)量大的時候就沒法這么玩了,因為海量數(shù)據(jù)移動成本太大,時間太長。但是中國有一句老話山不過來,我就過去。大數(shù)據(jù)分布式計算就是這種思想,既然大數(shù)據(jù)難以移動,那我就把容易移動的應用程序發(fā)布到各個節(jié)點進行計算唄,這就是大數(shù)據(jù)分布式計算的思路。

NodeManager

NodeManager 是 ResourceManager 在每臺機器的上代理,負責容器的管理,并監(jiān)控他們的資源使用情況(cpu,內(nèi)存,磁盤及網(wǎng)絡等),以及向 ResourceManager/Scheduler 提供這些資源使用報告。

三. 提交一個 Application 到 Yarn 的流程

這張圖簡單地標明了提交一個程序所經(jīng)歷的流程,接下來我們來具體說說每一步的過程。

Client 向 Yarn 提交 Application,這里我們假設是一個 MapReduce 作業(yè)。

ResourceManager 向 NodeManager 通信,為該 Application 分配第一個容器。并在這個容器中運行這個應用程序?qū)?ApplicationMaster。

ApplicationMaster 啟動以后,對 作業(yè)(也就是 Application) 進行拆分,拆分 task 出來,這些 task 可以運行在一個或多個容器中。然后向 ResourceManager 申請要運行程序的容器,并定時向 ResourceManager 發(fā)送心跳。

申請到容器后,ApplicationMaster 會去和容器對應的 NodeManager 通信,而后將作業(yè)分發(fā)到對應的 NodeManager 中的容器去運行,這里會將拆分后的 MapReduce 進行分發(fā),對應容器中運行的可能是 Map 任務,也可能是 Reduce 任務。

容器中運行的任務會向 ApplicationMaster 發(fā)送心跳,匯報自身情況。當程序運行完成后, ApplicationMaster 再向 ResourceManager 注銷并釋放容器資源。

以上就是一個作業(yè)的大體運行流程。

為什么會有 Yarn ?

上面說了這么多,最后我們來聊聊為什么會有 Yarn 吧。

直接的原因呢,就是因為 Hadoop1.0 中架構的缺陷,在 MapReduce 中,jobTracker 擔負起了太多的責任了,接收任務是它,資源調(diào)度是它,監(jiān)控 TaskTracker 運行情況還是它。這樣實現(xiàn)的好處是比較簡單,但相對的,就容易出現(xiàn)一些問題,比如常見的單點故障問題。

要解決這些問題,只能將 jobTracker 進行拆分,將其中部分功能拆解出來。彼時業(yè)內(nèi)已經(jīng)有了一部分的資源管理框架,比如 mesos,于是照著這個思路,就開發(fā)出了 Yarn。這里多說個冷知識,其實 Spark 早期是為了推廣 mesos 而產(chǎn)生的,這也是它名字的由來,不過后來反正是 Spark 火起來了。。。

閑話不多說,其實 Hadoop 能有今天這個地位,Yarn 可以說是功不可沒。因為有了 Yarn ,更多計算框架可以接入到 Hdfs 中,而不單單是 MapReduce,到現(xiàn)在我們都知道,MapReduce 早已經(jīng)被 Spark 等計算框架趕超,而 Hdfs 卻依然屹立不倒。究其原因,正式因為 Yarn 的包容,使得其他計算框架能專注于計算性能的提升。Hdfs 可能不是最優(yōu)秀的大數(shù)據(jù)存儲系統(tǒng),但卻是應用最廣泛的大數(shù)據(jù)存儲系統(tǒng),Yarn 功不可沒。

關于“Hadoop Yarn是什么意思”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI