分布式計算 MapReduce與yarn工作機制

一、第一代hadoop組成與結構

第一代Hadoop,由分布式存儲系統HDFS和分布式計算框架MapReduce組成,其中,HDFS由一個NameNode和多個DataNode組成,MapReduce由一個JobTracker和多個TaskTracker組成,對應Hadoop版本為Hadoop 1.x和0.21.X,0.22.x。 ?

???

1、MapReduce角色分配


Client :作業提交發起者。

JobTracker: 初始化作業,分配作業,與TaskTracker通信,協調整個作業。

TaskTracker:保持JobTracker通信,在分配的數據片段上執行MapReduce任務。

wKioL1ggCdOAjDcXAABfYoWNtd8580.png

?

2、MapReduce執行流程

wKioL1ggCe-TLNr4AACcJpwl7sY912.jpg

?

(1)提交作業

在作業提交之前,需要對作業進行配置

程序代碼,主要是自己書寫的MapReduce程序。

輸入輸出路徑

其他配置,如輸出壓縮等。

配置完成后,通過JobClinet來提交


(2)作業的初始化

客戶端提交完成后,JobTracker會將作業加入隊列,然后進行調度,默認的調度方法是FIFO調試方式。

(3)任務的分配

TaskTracker和JobTracker之間的通信與任務的分配是通過心跳機制完成的。

TaskTracker會主動向JobTracker詢問是否有作業要做,如果自己可以做,那么就會申請到作業任務,這個任務可以使Map也可能是Reduce任務。

(4)任務的執行

申請到任務后,TaskTracker會做如下事情:

拷貝代碼到本地

拷貝任務的信息到本地

啟動JVM運行任務

(5)狀態與任務的更新

任務在運行過程中,首先會將自己的狀態匯報給TaskTracker,然后由TaskTracker匯總告之JobTracker。

任務進度是通過計數器來實現的。

(6)作業的完成

JobTracker是在接受到最后一個任務運行完成后,才會將任務標志為成功。

此時會做刪除中間結果等善后處理工作。


二、第二代hadoop組成與結構


第二代Hadoop,為克服Hadoop 1.0中HDFS和MapReduce存在的各種問題而提出的。針對Hadoop 1.0中的單NameNode制約HDFS的擴展性問題,提出了HDFS Federation,它讓多個NameNode分管不同的目錄進而實現訪問隔離和橫向擴展;針對Hadoop 1.0中的MapReduce在擴展性和多框架支持方面的不足,提出了全新的資源管理框架YARN(Yet Another Resource Negotiator),它將JobTracker中的資源管理和作業控制功能分開,分別由組件ResourceManager和ApplicationMaster實現,其中,ResourceManager負責所有應用程序的資源分配,而ApplicationMaster僅負責管理一個應用程序。對應Hadoop版本為Hadoop 0.23.x和2.x。


1、 yarn運行架構


YARN 是下一代Hadoop計算平臺,如下所示:

wKiom1ggCgrBLQrPAACl4zW6UwU879.png

?

在 YARN 架構中,一個全局ResourceManager 以主要后臺進程的形式運行,它通常在一臺獨立機器上運行,在各種競爭的應用程序之間仲裁可用的集群資源。

ResourceManager會追蹤集群中有多少可用的活動節點和資源,協調用戶提交的哪些應用程序應該在何時獲取這些資源。ResourceManager是惟一擁有此信息的進程,所以它可通過某種共享的、安全的、多租戶的方式制定分配(或者調度)決策(例如,依據應用程序優先級、隊列容量、ACLs、數據位置等)。

在用戶提交一個應用程序時,一個稱為ApplicationMaster的輕量型進程實例會啟動來協調應用程序內的所有任務的執行。這包括監視任務,重新啟動失敗的任務,推測性地運行緩慢的任務,以及計算應用程序計數器值的總和。這些職責以前是分配給單個 JobTracker來完成的。ApplicationMaster和屬于它的應用程序的任務,在受NodeManager控制的資源容器中運行。


NodeManager是TaskTracker的一種更加普通和高效的版本。沒有固定數量的 map 和 reduce slots,NodeManager 擁有許多動態創建的資源容器。容器的大小取決于它所包含的資源量,比如內存、CPU、磁盤和網絡 IO。目前,僅支持內存和 CPU (YARN-3)。一個節點上的容器數量,由節點資源總量(比如總CPU數和總內存)共同決定。


需要說明的是:ApplicationMaster可在容器內運行任何類型的任務。例如,MapReduce ApplicationMaster請求一個容器來啟動map或reduce 任務,而 Giraph ApplicationMaster請求一個容器來運行Giraph任務。


我們還可以實現一個自定義的 ApplicationMaster 來運行特定的任務,進而發明出一種全新的分布式應用程序框架,改變大數據格局。


在YARN中,MapReduce降級為一個分布式應用程序的一個角色(但仍是一個非常流行且有用的角色),現在稱為 MRv2。MRv2 是經典MapReduce引擎(稱為 MRv1)的重現,運行在YARN之上。


2、YARN可運行任何分布式應用程序


ResourceManager、NodeManager 和容器都不關心應用程序或任務的類型。所有特定于應用程序框架的代碼都會轉移到ApplicationMaster,以便任何分布式框架都可以受 YARN 支持。

得益于這個一般性的方法,Hadoop YARN集群可以運行許多不同分布式計算模型,例如:MapReduce、Giraph、Storm、Spark、Tez/Impala、MPI等。


3、YARN中提交應用程序

下面討論在應用程序提交到YARN集群時,ResourceManager、ApplicationMaster、NodeManagers和容器如何相互交互。下圖顯示了一個例子。

wKioL1ggCjfA2tMDAABq4OUH9Vw685.png

?

假設用戶采用與MRv1中相同的方式鍵入hadoop jar命令,將應用程序提交到 ResourceManager。ResourceManager維護在集群上運行的應用程序列表,以及每個活動的 NodeManager上的可用資源列表。


ResourceManager 需要確定哪個應用程序接下來應該獲得一部分集群資源。該決策受到許多限制,比如隊列容量、ACL 和公平性。ResourceManager 使用一個可插拔的 Scheduler。Scheduler 僅執行調度;它管理誰在何時獲取集群資源(以容器的形式),但不會對應用程序內的任務執行任何監視,所以它不會嘗試重新啟動失敗的任務。


在 ResourceManager接受一個新應用程序提交時,Scheduler制定的第一個決策是選擇將用來運行ApplicationMaster的容器。在 ApplicationMaster啟動后,它將負責此應用程序的整個生命周期。首先也是最重要的是,它將資源請求發送到 ResourceManager,請求運行應用程序的任務所需的容器。

資源請求是對一些容器的請求,用以滿足一些資源需求,比如:

  • 一定量的資源,目前使用MB內存和CPU份額來表示

  • 一個首選的位置,由主機名、機架名稱指定

  • 此應用程序中的一個優先級,而不是跨多個應用程序


如果可能的話,ResourceManager 會分配一個滿足ApplicationMaster在資源請求中所請求的容器(表達為容器 ID和主機名)。該容器允許應用程序使用特定主機上給定的資源量。分配一個容器后,ApplicationMaster會要求NodeManager(管理分配容器的主機)使用這些資源來啟動一個特定于應用程序的任務。此任務可以是在任何框架中編寫的任何進程(比如一個 MapReduce 任務或一個Giraph任務)。


NodeManager 不會監視任務;它僅監視容器中的資源使用情況,例如,如果一個容器消耗的內存比最初分配的更多,它會結束該容器。


ApplicationMaster會竭盡全力協調容器,啟動所有需要的任務來完成它的應用程序。它還監視應用程序及其任務的進度,在新請求的容器中重新啟動失敗的任務,以及向提交應用程序的客戶端報告進度。

應用程序完成后,ApplicationMaster 會關閉自己并釋放自己的容器。


盡管ResourceManager不會對應用程序內的任務執行任何監視,但它會檢查 ApplicationMaster的健康狀況。如果 ApplicationMaster失敗,ResourceManager 可在一個新容器中重新啟動它。我們可以認為ResourceManager負責管理ApplicationMaster,而 ApplicationMasters負責管理任務。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542287.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542287.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++ stl隊列初始化_創建一個向量,并將其像C ++ STL中的數組一樣初始化

c stl隊列初始化向量是什么? (What is the vector?) Vector is a container in C STL, it is used to represent array and its size can be changed. Vector是C STL中的一個容器,用于表示數組,并且其大小可以更改。 Read more: C STL Vec…

計算機無法上無線網絡連接到internet,電腦連接不上無線網絡,教您怎么解決電腦連接不上無線網絡...

小編家的那位筆記本姐姐之前可能是受委屈了,一個一個的電腦問題丟出來給我解決。之前有段時間總是出現電腦連接不上無線網絡的問題,弄得那短時間天天都在想辦法是解決。現在,我就要將這種解決方法分享給你們,讓你們在遇到這個問題…

格蘭杰因果關系檢驗_混頻(mixed frequency)數據的格蘭杰因果(Grange causality)檢驗及其Matlab實現...

格蘭杰和格蘭杰因果網絡搜到的Grange大神標準照格蘭杰1934年9月出生于英國威爾士的斯旺西,早期就讀于諾丁漢大學,接受當時英國第一個經濟學數學雙學位教育,1955年留校任教,1957年在天文學雜志上他發表了第一篇論文:“關…

C#Convert.ToInt32(byte)方法-將字節值轉換為int

C#Convert.ToInt32(byte)方法 (C# Convert.ToInt32(byte) Method) Convert.ToInt32(byte) Method is used to convert a specific byte value to its equivalent integer (int 32 signed number). Convert.ToInt32(byte)方法用于將特定的字節值轉換為其等效的整數(i…

后臺窗口截圖_萬人擁捧的截圖軟件來啦!讓你的工作效率提升不止一倍!

文章來自微信公眾號:小七有料直接進入正題,今天不野給大家分享兩款截圖軟件——Snipaste和FastStone Capture,前者與其說是一個截圖軟件,我更愿意稱之為貼圖軟件。兩者都在工作中很大程度提高了我的效率,也簡便化了我很…

ibm nvidia 超級計算機,IBM,Nvidia和美國能源部組成一個超級計算機超級團隊

CNET技術信息網7月15日國際報道: IBM將與Nvidia和美國能源部合作建立兩個新的杰出超級計算機中心. 這項合作的工作主要集中在兩個方面,一個是確保應用程序可以充分利用超級計算機的強大性能,另一個是收集開發人員,工程師和科學家的反饋.這兩個…

C#Convert.ToInt32(char)方法-將char值轉換為int

C#Convert.ToInt32(char)方法 (C# Convert.ToInt32(char) Method) Convert.ToInt32(char) Method is used to convert a specific char value to its equivalent integer (int 32 signed number) (It can also be known as ASCII value). Convert.ToInt32(char)方法…

華為p40論壇_華為高端旗艦繼續發力!麒麟990 5G+超感知三攝,256GB降價799元

小米10、一加8,vivo NEX3S等高性能旗艦產品現已在市場上發售。其中,5G旗艦華為P40也在銷售團隊中,并且最近成為最受歡迎的旗艦產品。由于華為P40高端版從799元跌至4189元,消費者可以以不到800元的價格購買低價高性能旗艦產品&…

計算機基礎.doc,大學生計算機基礎.doc

WORD格式 整理分享范文范例 參考指導電子計算機的誕生1計算機的發展經歷了4個時代,各個時代劃分的原則是根據( )。A、計算機所采用的電子器件B、計算機的運算速度C、程序設計語言D、計算機的存儲量正確答案:A?2世界上第一臺電子計算機誕生于( )年。A、1…

移動端類似IOS的滾動年月控件(需要jQuery和iScroll)

http://www.cnblogs.com/ccblogs/p/5260949.html 一. 效果圖 二. 功能介紹 支持滾動和點擊選擇年月。&#xff08;目前只支持設置年月的最大最小值&#xff0c;不支持整體的最大最小值&#xff09; 三. 代碼 1. 在你的html中添加如下代碼&#xff1a; 直接加載<body>里面…

css 橫向滾動隱藏滾動條_使用CSS滾動時如何隱藏滾動條?

css 橫向滾動隱藏滾動條Introduction: 介紹&#xff1a; It is always nice to have a responsive website or web page, to create such websites or web pages we have to make use of our developing skills to a great extent to bring about the functionality as well a…

DrawerLayout側滑詳解

前面我們說了自定義側滑菜單&#xff0c;也說了SlidingMenu的使用&#xff0c;這一節我們再來說下DrawerLayout。DrawerLayout是Support Library包中實現了側滑菜單效果的控件&#xff0c;可以說DrawerLayout是因為第三方控件如SlidingMenu等出現之后&#xff0c;google借鑒而出…

華為筆記本計算機在哪,新一代華為MateBook 的機會在哪里?

2017年5月23日 在德國柏林&#xff0c;華為正式面向全球消費者發布了MateBook系列新品——13英寸靈動商務筆記本MateBook X、12英寸時尚二合一筆記本MateBook E及15.6英寸商務影音筆記本MateBook D。今天筆記本市場似乎是一個比較穩定的市場&#xff0c;筆記本的銷量增長不快&a…

python 字符串 變量_檢查變量是否為字符串的Python程序

python 字符串 變量Python | 檢查變量是否為字符串 (Python | Check if a variable is a string) To check whether a defined variable is a string type or not, we can use two functions which are Python library functions, 要檢查定義的變量是否為字符串類型&#xff0c…

mysql shell

mysql 查詢10分鐘以內的數據:select *from t_agent where int_last_login>CURRENT_TIMESTAMP - INTERVAL 10 MINUTE; mysql關聯多表進行update更新操作UPDATE TrackINNER JOIN MVON Track.trkidMV.mvidSET Track.is_showMV.is_showWHERE trkid<6等同于UPDATE Track,MVSET…

kaggle計算機視覺比賽技巧,9. 計算機視覺 - 9.12. 實戰Kaggle比賽:圖像分類(CIFAR-10) - 《動手學深度學習》 - 書棧網 · BookStack...

9.12. 實戰Kaggle比賽&#xff1a;圖像分類(CIFAR-10)到目前為止&#xff0c;我們一直在用Gluon的data包直接獲取NDArray格式的圖像數據集。然而&#xff0c;實際中的圖像數據集往往是以圖像文件的形式存在的。在本節中&#xff0c;我們將從原始的圖像文件開始&#xff0c;一步…

qthread中獲取當前優先級_Linux中強大的top命令

top命令算是最直觀、好用的查看服務器負載的命令了。它實時動態刷新顯示服務器狀態信息&#xff0c;且可以通過交互式命令自定義顯示內容&#xff0c;非常強大。在終端中輸入top&#xff0c;回車后會顯示如下內容&#xff1a;top - 21:48:39 up 8:57, 2 users, load average: 0…

JavaScript中帶示例的String repeat()方法

JavaScript | 字符串repeat()方法 (JavaScript | String repeat() Method) The String.repeat() method in JavaScript is used to generate a string by repeating the calling string n number of times. n can be any integer from o to any possible number in JavaScript.…

Python生成驗證碼

#!/usr/bin/env python #coding:utf8 import random #方法1&#xff1a; str_codezxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP0123456789new_codefor i in range(4):   new_coderandom.choice(str_code)print new_code #方法2&#xff1a; new_code[]def str_code…

snmp 獲得硬件信息_計算機網絡基礎課程—簡單網絡管理協議(SNMP)

簡單網絡管理協議(Simple Network Management Protocol)?除了提供網絡層服務的協議和使用那些服務的應用程序&#xff0c;因特網還需要運行一些讓管理員進行設備管理、調試問題、控制路由、監測機器狀態的軟件。這種行為稱為網絡管理。??隨著網絡技術的飛速發展&#xff0c;…