1. 程式人生 > >9992019/YARN,母系社會的執行架構

9992019/YARN,母系社會的執行架構

在這裡插入圖片描述
最近看了不少YARN的技術資料,每次看都覺得不知所云。無法理解其精髓,今天在航班上突然靈光一現,豁然開朗。然後,又洋洋灑灑在航班清潔袋上鬼畫符,寫下了今天我想跟大家分享的內容。我自己覺得蠻過癮的,也希望大家看著也更過癮。
廢話不多說,上圖!
在這裡插入圖片描述
首先,我鄭重申明:我家庭和睦,我很愛我的孩子,更愛我的老婆(請注意我說話的順序,我很嚴謹)。

解釋一下以上這張圖想要表達的意思。上圖講述的就是一個家庭生活中經常會遇到的場景:給小孩買東西。

兒子:小名Client,提需求是他的強項,自己沒有購買能力,只能將需求提交給他老媽——也就是我老婆。

老婆:小名RM,超級大Boss,家庭核心成員,掌門人,擅長垂簾聽政。平日主要負責兩件大事:1、資金管理,家裡的生活開支、事無鉅細、樣樣門兒清(老婆辛苦了)。2、排計劃,手上的資金不能亂花,所以都按計劃行事,杜絕突發情況出現。

老公:小名AM,也就是鄙人了。1、擅長執行任務(勞累命,哈哈),需要隨時接受老婆分配的工作任務。2、需要週期性的通過親情電話號碼向老婆彙報生活和工作等各方面的情況(多跟上級彙報工作是職場法則)。其他方面就不多說了,都是淚,過……。自己看圖理解!

買東西其實不復雜,具體的處理流程如下:

兒子只負責提需求。老婆主要根據當前家庭的收入支出情況,以及需求的合理性(玩具是否適合這個年齡段、是否具有危險性、是否適合男孩子玩等)來判斷需求是否可以被接納。一旦確定兒子提出的請求是合理的,就把購買商品的任務下發給老公執行。

還有一種情況,如果兒子一次性有多個商品需要購買的話,老婆為了防止老公搞混淆了,也會一個個的下達單獨的購買指令、由老公來負責逐一執行。老婆在提交購買指令的時候,會詳細說明購買商品的要求。

老公接到老婆下發的指令後,立馬執行任務。並且需要具備基本的判斷能力,比如:哪些商品適合在淘寶購買,哪些商品是適合在京東上購買等等。這個過程需要多加小心,處理的好就是一座豐碑,處理不當的話就會成為一個墓碑了,極有可能莫名其妙的得罪了老婆。

老公需要週期性的主動關注老婆的淘寶或京東購物車狀態,並且要對購物車中收藏的商品進行細緻的分析,理清楚商品購買的優先順序。確定購買優先順序的方法有以下幾種:
其一:老婆自用的商品優先順序高。如果老婆自用的商品太多,那就需要從時間維度考量,收藏時間很久的,優先順序一定要提高,不然死都不知道怎麼死的;
其二:價格低的商品優先順序高,花錢少,就別磨嘰了;
其三:把商品進行分類,比如:衣、食、住、行。然後根據各類產品所佔比例來排優先順序。這種情況下,一般購買量大,為了不影響本月的資金週轉,也建議購買佔比最小的商品類別。這樣花錢,心裡多少會好受一些。

在購買商品的時候,也必須及時跟老婆商討,以免選定的商品不符合要求。

老公選擇好商品後,正式下單。下單的快遞號需要及時發給老婆。老婆會經常提醒老公催廠家發貨。老公需要通過淘寶或者京東的App實時監控商品的物流狀態。值得說明的是:老公和老婆直接的溝通是有單獨的綠色通道的,在運營商設定了親情號碼,保證溝通快捷高效。

商品到貨後,交給兒子使用。

至此,整個流程結束。
在這裡插入圖片描述
為什麼文章標題要把YARN與母系社會扯在一起呢?

道理很簡單:女人,是適合處理各種對內、對外的事務的,溝通協調是她們的長項。簡單中不乏睿智,強勢中也不缺溫柔。

說點正經的吧。

YARN,是Yet Another Resource Negotiator的縮寫,是一個通用的資源管理平臺,可為各類計算框架(離線計算MR、線上計算Storm、記憶體計算Spark等)提供資源的管理和排程。它將叢集內所有節點的資源(CPU、記憶體、磁碟、網路等)抽象為Container,在資源進行運算任務時,計算框架需要向YARN申請Container,YARN按照策略對資源進行排程,進行Container的分配。

幾個基本元件介紹:

1、ResourceManager(RM)

RM是YARN的核心元件,屬於YARN家族中的大當家,主要由應用程式管理器(Applications Manager)和任務排程器(Scheduler)組成。其主要功能是負責系統資源的管理和分配。

應用程式管理器(Applications Manager)

應用程式管理器,負責管理整個系統中所有應用程式,包括應用程式提交、向任務排程器申請資源啟動ApplicationMaster、監控ApplicationMaster執行狀態並在失敗時重新啟動它。

任務排程器(Scheduler)

任務排程器根據系統資源容量以及管理員對佇列的限制條件,按照一定的策略將資源分配給正在執行的應用程式。相比於Hadoop1.x而言,Yarn為任務排程器做了減負,任務排程器不再負責跟蹤和監控應用的執行狀態,也不負責重新啟動因為應用執行失敗或者硬體故障而執行失敗的任務,這些任務都有該應用程式對應的ApplicationMaster來負責了,這使得YarnScheduler的功能更加純粹。另外,任務排程器和Hadoop1.x一樣也是一個熱插拔模組,你可以自定義自己的任務排程器,同樣你也可以直接使用其他任務排程器,如,Fair Scheduler或者Capacity Scheduler。

2、ApplicationMaster(AM)

每當使用者提交了一個應用程式就會為這個應用程式產生一個對應的AM,並且這個單獨程序是在其中一個子節點上執行的。它的主要功能:為應用向RM申請資源,並對Task實行排程、與NodeManager通訊以啟動或者停止任務、監控所有任務的執行情況,並且在任務失敗的情下,重新為任務申請資源並且重啟任務、負責推測任務的執行、當AM向RM註冊後,AM可以提供客戶端查詢作業進度資訊等。

3、NodeManager(NM)

NM是每個子節點上的資源和工作管理員,一方面,它會定向通過心跳資訊向RM彙報本節點上的資源使用情況和各個Container的執行情況;另一方面,它會接收並且處理來自AM的Container啟動和停止的各種請求。

4、Container

Container是YARN中對系統資源的抽象,同時它也是系統資源分配的基本單位,它封裝節點上多維度資源,其中包括CPU、記憶體、磁碟、網路等。YARN會為每個任務分配一個Container,並且該任務只能夠使用該Container中所描述的資源。Container是一個動態的資源劃分單位,它是根據實際提交的應用程式所需求的資源自動生成的,換句話說,Container其裡邊所描述的CPU、記憶體等資源是根據實際應用程式需求而變的。

YARN的工作流程如下:
在這裡插入圖片描述
步驟1,使用者(兒子)向YARN提交應用程式,其中包括使用者程式、相關檔案、啟動AM命令、AM程式等。

步驟2,RM(老婆)為該應用程式分配第一個Container(任務),並且與Container所在的NM(老公)通訊,並且要求該NM在這個Container中啟動應用程式對應的AM。

步驟3,AM(具體購買的某個商品)首先會向RM註冊,這樣使用者才可以直接通過RM檢視到應用程式的執行狀態,然後它為準備為該應用程式的各個任務申請資源,並監控它們的執行狀態直到執行結束,即重複後面4-7步驟。

步驟4,AM採用輪詢的方式通過RPC協議(親情號碼)向RM申請和領取資源。

步驟5,一旦AM申請到資源後,便會與申請到的Container所對應的NM進行通訊,並且要求它在該Container中啟動任務。

步驟6,任務啟動。NM為要啟動的任務配置好執行環境,包括環境變數、JAR包、二進位制程式等,並且將啟動命令寫在一個腳本里,通過該指令碼執行任務。

步驟7,各個任務通過RPC協議向其對應的AM彙報自己的執行狀態和進度,以讓AM隨時掌握各個任務的執行狀態,從而可以在任務執行失敗時重啟任務(監控商品快遞的狀態等)。

步驟8,應用程式執行完畢後,其對應的AM會向RM通訊,要求登出和關閉自己。

最後,還原一下最開始的架構圖,供各位理解:
在這裡插入圖片描述
不得不說:生活,就是一門高深莫測的藝術!你們承不承認?