第1點:什麼是yarn?
yarn是hadoop架構中的資源排程引擎模組,從這個模組名字就可以看出來,yarn是用來為應用提供資源管理和排程的。
類似於hdfs,yarn也是經典的主從架構。架構的內容放在第2點講,如果面試介紹yarn的話,老劉建議第一點和第二點一起講。
第2點:yarn架構
先看這張架構圖,就可以知道yarn是非常典型的主從架構。yarn由乙個resourcemanager(rm)和多個nodemanager(nm)構成,rm是主節點,nm是從節點。
什麼是resourcemanager?
rm主要由兩個元件構成:排程器和應用程式管理器。
什麼是排程器(scheduler)?
排程器就是根據容量 、佇列一些限制條件,將系統中的資源分配給各個正在執行的應用程式,這裡有一句話想說,排程器是乙個純排程器,就是它只管資源分配,不參與具體應用程式相關的工作。
應用程式管理器它主要負責監控管理整個系統的所有應用程式,同時負責向rm申請資源、返還資源等。
什麼是nodemanager?
nodemanager是乙個從服務,整個集群有多個。它負責接收rm的資源分配請求,分配具體的container給應用,它也負責監控並報告container的使用資訊給rm。
什麼是contaienr?
container是yarn中分配資源的乙個單位,包括記憶體、cpu等資源,yarn以container為單位分配資源。
第3點:yarn應用提交過程
老劉這裡簡單講講yarn的應用提交過程,主要想講的是mapreduce on yarn這個內容。
根據上面的圖,就可以看出來yarn的應用提交過程。
第一步是使用者將應用程式提交到 resourcemanager 上;
下面就是重點內容,詳細講講mapreduce on yarn。
第4點:mapreduce on yarn
這一點,很重要,第3點就是說說了皮毛,第4點是詳細的描述整個過程,老劉盡量講的通俗易懂點,mapreduce on yarn執行過程如下:
1、先把程式打成jar包,接著客戶端執行hadoop jar命令,就會把job提交到集群中執行。在這個過程中,程式裡的job.waitforcompletion()會呼叫job裡的submit()方法。
2、接著會遠端呼叫resourcemanager的getid,就會得到乙個mr作業的id。同時也會檢查輸出目錄是否存在,如果沒有指定輸出目錄或者目錄已經存在,就會報錯;也會計算作業分片,若無法計算分片,也會報錯。
3、接下裡,會把job相關的配置檔案,jar包,分片資訊,上傳到hdfs。
4、客戶端將應用程式提交給rm,任務開始真正執行。
這裡面的簿記物件要說一下,很多地方都沒解釋它是什麼,就一筆忽略,在老劉看來這就有點不太好。
這一步老劉想說的是在看資料中,大家可以嘗試反問下自己,比如就這個它會計算資源,你可以問問自己,它計算什麼資源,這對自身進步有很大幫助。
10、但是在容器中執行任務(yarnchild)之前,會將執行任務需要的資源拉取到本地(jar包,配置檔案,分布式快取檔案)。
11、任務執行。
老劉盡量用口語化的形式表達出來了,希望大家能夠記住它。
第5點:yarn應用生命週期
1、client向rm提交應用,包括am程式及啟動am的命令。
2、rm為am分配第乙個容器,並與對應的nm通訊,令其在容器上啟動應用的am。
3、am啟動時向rm註冊,允許client向rm獲取am資訊然後直接和am通訊。
4、am通過資源請求協議,為應用協商容器資源。
5、如容器分配成功,am要求nm在容器中啟動應用,應用啟動後可以和am獨立通訊。
6、應用程式在容器中執行,並向am匯報。
7、在應用執行期間,client和am通訊獲取應用狀態。
8、應用執行完成,am向rm登出並關閉,釋放資源。
第6點:yarn常用命令
啟動yarn第7點:yarn排程器大家先想想為什麼需要排程器?在現實生活中,絕對會遇到同時提交任務的場景,那這個時候到底如何分配資源滿足這些任務呢?誰先執行呢?都是有講究的!start-yarn.sh
停止rm和nm
stop-yarn.sh
檢視正在執行的任務
殺掉正在執行任務
檢視節點列表
yarn node -list
所以在yarn框架中,排程器是一塊很重要的內容。有了合適的排程規則,就可以保證多個應用可以在同一時間有條不紊的工作。
yarn中最原始的排程規則是fifo,就是誰先提交任務誰先執行。但是這樣很可能會導致兩種情況:① 乙個大任務獨佔資源,其他的資源需要不斷的等待大任務完成;② 一堆小任務占用資源,大任務一直無法得到適當的資源。所以fifo雖然很簡單,但是並不能滿足我們的需求。
所以在yarn中現在有三種排程器可以選擇:fifo scheduler ,capacity scheduler,fairs cheduler。
fifo scheduler是把應用按提交的順序排成乙個佇列,這是乙個先進先出佇列,在進行資源分配的時候,先給佇列中第乙個應用進行分配資源,等到第乙個的應用需求滿足後再給第二個分配。
fifo scheduler是最簡單也是最容易理解的排程器,也不需要任何配置,但它的缺點剛剛也說了。大的應用可能會占用所有集群資源,這就導致其它應用被阻塞。所以如果在共享的集群中,更適合採用capacity scheduler或fair scheduler。
對於capacity排程器,它會有乙個專門的佇列用來執行小任務,但是為小任務專門設定乙個佇列會預先占用一定的集群資源,這就導致大任務的執行時間會落後於使用fifo排程器時的時間。
但是在fair排程器中,我們不需要預先占用一定的系統資源,fair排程器會為所有執行的job動態的調整系統資源。當第乙個大job提交時,這時只有這乙個job在執行,此時它獲得了所有集群資源;當第二個小任務提交後,fair排程器會分配一半資源給這個小任務,讓這兩個任務公平的共享集群資源。小任務執行完成之後就會釋放自己占用的資源,大任務又獲得了全部的資源,這樣就保證了fair排程器既得到了高的資源利用率又能保證小任務的及時完成。
好啦,yarn知識點就講的差不多了,老劉盡量用通俗易懂的口語化形式將這些知識點表達出來了,希望能夠對大資料感興趣的同學有幫助,也希望能夠得到大佬們的批評和指點。
覺得老劉寫的不錯的,給老劉點個贊吧!
大資料 三 YARN
流式計算框架 storm 記憶體計算框架 spark 離線計算框架 mapreduce 僅適合離線批處理 具有很好的容錯性和擴充套件性 適合簡單的批處理任務 缺點明顯 啟動開銷大 過多使用磁碟導致效率低下等 dag計算框架 apache tez dag計算 多個作業之間存在資料依賴關係,並形成乙個依...
大資料hadoop之yarn
yarn是乙個資源排程平台負責為運算程式提供伺服器運算資源,相當於乙個分布式作業系統平台,mr等程式在上面執行。mr程式把任務提交到客戶端所在節點 rm將使用者請求初始化乙個task進入自己的任務排程佇列,傳送task任務到nm am向rm申請執行maptask容器 rm向nm分配maptask,n...
大資料安全怎麼保證?
當前,我國亟須依據 關於促進大資料發展的行動綱要 綜合採取戰略 政策 法律等多種工具,構建起包括法律 行政 技術 行業 社會等在內的大資料安全保護體系,加大大資料的安全保護力度,營造健康環保的大資料生態運營體系。一是加強基礎保護技術的研發和推廣應用。推廣業務系統防攻擊防入侵通用保護技術的普及和應用,...