yarn產生背景
為什麼會產生yran?這個與mapreduce1.x的架構有關,正是因為mapreduce1.x存在許多的問題,才會產生 yarn。
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的概述我們在之前的文章中已經說過了,這裡就不多介紹了。
yarn的全稱是yet another resource negotiatord。
通用的資源管理系統,要申請資源統一經過yarn進行申請就行了。
為上層應用提供統一的資源管理和排程。
yarn的架構如下圖所示:
yarn的架構由這幾個部分構成:
client,很簡單自然就是跟公司合作的客戶。提交乙個作業就相當於客戶跟公司一筆生意談成了,客戶提要求,公司負責幫客戶去完成專案,只是這裡沒有金錢交易而已。
rm,相當於公司的管事的boss,權力很大,所有公司的事都要聽他的。我們對照則rm的作用一條一條來理解,首先,乙個公司同一時間只能有乙個拍板的,不能你說你的他說他的,最後整個公司也不知道聽誰的,那就徹底亂套了。如果某天老闆生病了,那就只能委託乙個**暫時幫他行使管理的責任,這個**就是備用的rm。其次,老闆可以決定專案何時終止,何時開始,這個很好理解。nm相當於公司下面分設的許多部門,am相當於某個具體專案的負責人,具體的我們待會再說,暫時先這麼理解。最後,老闆可以隨時知道部門的情況,如果某個部門集體度假了,或者出了什麼重大事故,那麼自然這個部門所牽涉的專案就要被擱置,這時候對於這個專案該怎麼處理,是等他們回來再繼續,還是直接把專案給其他的部門,這就要問這個專案的負責人了,怎麼決斷就要聽他的意見,畢竟這個專案是他負責的。
nm所在的整個節點,相當於公司的各個部門,唯一的區別就是,在公司中,往往不會設立兩個財務部門或三個人力部門,公司的部門往往是唯一的。而yarn 的結構中,每個節點並不具有唯一性,所以我們為了模擬方便,可以假設這個公司有3個開發部門,4個測試部門這樣。這樣rm就可以理解成這個部門的負責人,顯然rm對於本部門的情況是十分了解的,包括哪個人今天有沒有來上班,部門現在的工作能力如何,是不是有人還處於空閒沒事做的狀態等等。負責人需要定期向老闆遞交工作記錄(心跳資訊)從而讓老闆知道這個部門的工作能力如何啊等等這些資訊,這樣下次有新任務的時候,老闆就知道能不能分配給這個部門。作為部門負責人,自然得聽老闆的話,老闆給你個任務,讓你立馬在部門中給我組個小組(container)完成,你就要執行老闆的命令。同時對於專案負責人的要求,他也要盡量可能滿足,比如專案負責人說我這個專案需要你們部門哪些哪些人幫我去做,那部門負責人就按照他的要求把那些人組成乙個小組去執行任務。
am,專案負責人或團隊,乙個公司可能有多個專案,自然每個專案需要有乙個專案負責人。專案負責人在做專案的時候必定會用到公司中的資源,比如開會需要會議室、印表機啊,那自然得跟老闆去申請說,我這個專案需要利用公司的會議室、印表機等等,老闆說可以啊沒問題,那麼他拿到這些資源後就會給每個小組說,我已經幫你們申請到這些東西了,以後你們要用的話就直接可以用了。最後,他可以跟某個部門的負責人說,我需要你們部門的幾個人組成乙個小組(container)來幫我做這個專案,或者你們部門的這個小組做的不行,我不要他們了。
container就是乙個小組,小組內有大家可以共用的一些資源,每個專案分成乙個個小的任務也是在各個小組中完成的,每個小組都屬於某個部門,乙個部門可以有若干個小組。
不知道這樣說會不會對理解yarn的架構有所幫助,這只是我在看到這個架構時的一些理解。
我們再來思考乙個問題,為什麼說在1.x版本不能支援其他計算框架的執行,而使用了yarn後就可以了呢?關鍵在於這個流程是個通用的流程,am作為應用程式的主控程式,如果我們對於相應的框架都做出對應的am的實現,也就是說,如果是mapreduce,那麼這裡的am就是mapreduce對應的am,對於spark也是同樣的道理。那麼在yarn之上就可以執行很多計算框架了。其實可以把yarn的作用理解成可以跑各種計算框架的作業系統,就跟使用windows作業系統,你就可以在這個作業系統上執行各種軟體一樣。
更多的資訊可以參見hadoop官網上關於yarn架構的文件描述(
Hadoop學習筆記之YARN
yarn service框架提供了一流的支援和api,可以在yarn中本地化時間執行的服務。簡而言之 in a nutshell 它作為乙個容器編排平台,用於管理yarn上的貨櫃化服務。它支援yarn中的docker容器和傳統的基於程序的容器。該框架的職責包括執行配置解決方案和安裝,生命週期管理 如...
hadoop學習筆記3 yarn
1.管理多種大資料框架spark hive等 使得不同框架之間資源共享,減少資源浪費 2.誕生原因 為了執行多種框架,比如想引入spark計算引擎,才導致了yarn的誕生 3.yarn縮寫 yet another resource negotiator 協作 使得 on yarn 如spark on...
Hadoop學習日記(九) Yarn框架
2019.07.01 學習過程主要參考段海濤大資料p26 1.runjar程序向resourcemanager申請執行乙個job 2.resourcemanager返回job相關資源的提交路徑staging dir和為本job產生的jobid 3.向hdfs提交資源 4.匯報提交結果 5.將本job...