資源排程系統 Yarn

2021-09-24 08:08:40 字數 3094 閱讀 4731

系列文章:

mapreduce程式設計模型和計算框架架構原理

分布式檔案系統-hdfs

yarn產生背景

mapreduce1.x的架構如下:

mapreduce1.x的架構

hadoop1.x時,mapreduce的架構仍然是主從架構。乙個jobtracker帶多個tasktracker,主節點為jobtracker,只有乙個,從節點為tasktracker,可以有多個,從節點通過向主節點傳送心跳資訊(heartbeat)來告訴它自己的運**況,而主節點則是負責管理排程的工作。

jobtracker(jt):負責資源管理和作業排程。

tasktracker(tt):定期向jt匯報本節點的健康狀況、資源使用情況、作業執**況。接收來自jt的命令,從而啟動任務或殺死任務。

那麼這個架構存在什麼樣的問題呢?

首先是單點故障的問題,所有的從節點(tt)都是跟主節點(jt)直接關聯的,如果主節點不小心掛了,那麼整個系統就崩潰了,就沒有辦法執行了。

其次,jt的壓力大且不易擴充套件,他要接收所有從節點(tt)的心跳資訊(heartbeat)和客戶端的請求,jt承擔的職責特別多,隨著集群擴充套件後,那麼jt的壓力就會越來越大。

最後,最大的問題就是相容性問題,它不相容除了mapreduce外的其他框架,比如spark是不能跑在這個系統上的。

而有了yarn之後,基於yarn之上可以執行很多其他的計算框架,不同計算框架可以共享同乙個hdfs集群上資料,享受整體的資源排程。它相當於作業系統,起著排程管理的工作。

yarn的架構如下圖所示:

yarn的架構由這幾個部分構成:

resourcemanager(rm):資源管理器

nodemanager(nm):節點管理器

container:容器

client:客戶端

關於這個架構我是這麼理解的,可以將它與企業或者公司的管理進行對比:

client,很簡單自然就是跟公司合作的客戶。提交乙個作業就相當於客戶跟公司一筆生意談成了,客戶提要求,公司負責幫客戶去完成專案,只是這裡沒有金錢交易而已。

rm,相當於公司的管事的boss,權力很大,所有公司的事都要聽他的。我們對照則rm的作用一條一條來理解,首先,乙個公司同一時間只能有乙個拍板的,不能你說你的他說他的,最後整個公司也不知道聽誰的,那就徹底亂套了。如果某天老闆生病了,那就只能委託乙個**暫時幫他行使管理的責任,這個**就是備用的rm。其次,老闆可以決定專案何時終止,何時開始,這個很好理解。nm相當於公司下面分設的許多部門,am相當於某個具體專案的負責人,具體的我們待會再說,暫時先這麼理解。最後,老闆可以隨時知道部門的情況,如果某個部門集體度假了,或者出了什麼重大事故,那麼自然這個部門所牽涉的專案就要被擱置,這時候對於這個專案該怎麼處理,是等他們回來再繼續,還是直接把專案給其他的部門,這就要問這個專案的負責人了,怎麼決斷就要聽他的意見,畢竟這個專案是他負責的。

nm所在的整個節點,相當於公司的各個部門,唯一的區別就是,在公司中,往往不會設立兩個財務部門或三個人力部門,公司的部門往往是唯一的。而yarn 的結構中,每個節點並不具有唯一性,所以我們為了模擬方便,可以假設這個公司有3個開發部門,4個測試部門這樣。這樣rm就可以理解成這個部門的負責人,顯然rm對於本部門的情況是十分了解的,包括哪個人今天有沒有來上班,部門現在的工作能力如何,是不是有人還處於空閒沒事做的狀態等等。負責人需要定期向老闆遞交工作記錄(心跳資訊)從而讓老闆知道這個部門的工作能力如何啊等等這些資訊,這樣下次有新任務的時候,老闆就知道能不能分配給這個部門。作為部門負責人,自然得聽老闆的話,老闆給你個任務,讓你立馬在部門中給我組個小組(container)完成,你就要執行老闆的命令。同時對於專案負責人的要求,他也要盡量可能滿足,比如專案負責人說我這個專案需要你們部門哪些哪些人幫我去做,那部門負責人就按照他的要求把那些人組成乙個小組去執行任務。

am,專案負責人或團隊,乙個公司可能有多個專案,自然每個專案需要有乙個專案負責人。專案負責人在做專案的時候必定會用到公司中的資源,比如開會需要會議室、印表機啊,那自然得跟老闆去申請說,我這個專案需要利用公司的會議室、印表機等等,老闆說可以啊沒問題,那麼他拿到這些資源後就會給每個小組說,我已經幫你們申請到這些東西了,以後你們要用的話就直接可以用了。最後,他可以跟某個部門的負責人說,我需要你們部門的幾個人組成乙個小組(container)來幫我做這個專案,或者你們部門的這個小組做的不行,我不要他們了。

container就是乙個小組,小組內有大家可以共用的一些資源,每個專案分成乙個個小的任務也是在各個小組中完成的,每個小組都屬於某個部門,乙個部門可以有若干個小組。

不知道這樣說會不會對理解yarn的架構有所幫助,這只是我在看到這個架構時的一些理解。

yarn的執行流程

客戶端提交乙個作業請求給rm,可以是mapreduce作業,也可以spark作業。

rm會為作業分配第乙個container,假設這個container執行在第二個節點上,這樣rm就會與對應的nm進行通訊,也就是跟第二個節點的nm說,我要在你上面啟動乙個container。

am啟動完了之後,會在rm中進行註冊,註冊了使用者就可以通過rm看到作業執行的進度了。並且am會將需要使用的資源,比如需要多少memory,向rm進行申請,如果申請到資源就美滋滋,接著進行下面的步驟。

申請到資源後,am就在對應的nm上開始啟動任務。假設需要在第乙個nm啟動2個task,在第三個nm上啟動1個task,那麼把這些通知傳送給對應的nm。

nm在接受到這些通知後,就知道自己需要建立幾個task,於是在nm上啟動相應的container,並把task放到container中去執行。

其實這個流程並不是很複雜,可以對照著之前舉的公司的例子,把相應的角色帶入進去理解一下流程。

我們再來思考乙個問題,為什麼說在1.x版本不能支援其他計算框架的執行,而使用了yarn後就可以了呢?關鍵在於這個流程是個通用的流程,am作為應用程式的主控程式,如果我們對於相應的框架都做出對應的am的實現,也就是說,如果是mapreduce,那麼這裡的am就是mapreduce對應的am,對於spark也是同樣的道理。那麼在yarn之上就可以執行很多計算框架了。其實可以把yarn的作用理解成可以跑各種計算框架的作業系統,就跟使用windows作業系統,你就可以在這個作業系統上執行各種軟體一樣。

Yarn資源排程

由於yarn良好的相容性和擴充套件性,目前可以支援大部分資料引擎,所以了解yarn的資源排程原理很有必要,yarn主要由四個重要角色組成 yarn排程主要分為8個步驟如上圖所示 1.有yarnclient提交program資訊打拼resourcemanager,包括 應用 和應用需要的一切引數和環境...

Yarn資源排程

yarn的介紹 yarn是hadoop集群當中的資源管理系統模組,從hadoop2.0開始引入yarn模組,yarn可為各類計算框架提供資源的管理和排程,主要用於管理集群當中的資源 主要是伺服器的各種硬體資源,包括cpu,記憶體,磁碟,網路io等 以及排程執行在yarn上面的各種任務。yarn核心出...

yarn 資源排程

目錄關於yarn常用引數設定 yarn我們都知道主要是用於做資源排程,任務分配等功能的,那麼在hadoop當中,究竟使用什麼演算法來進行任務排程就需要我們關注了,hadoop支援好幾種任務的排程方式,不同的場景需要使用不同的任務排程器.把任務按提交的順序排成乙個佇列,這是乙個先進先出佇列,在進行資源...