【云駐共創】一文看懂MapReduce和Yarn技術原理
前言
本章主要講述大數據領域中最著名的批處理與離線處理計算框架—―—MapReduce,包括MapReduce的原理、流程、使用場景,以及Hadoop集群中負責統一的資源管理與調度的組件——Yarn,包括Yarn的定義、功能與架構、HA方案和容錯機制,以及利用Yarn完成資源調配的常用方法。最后,我們還簡單介紹華為為這些組件所提供的增強特性。
一、MapReduce和Yarn基本介紹
MapReduce概述
MapReduce基于Google發布的MapReduce論文設計開發,基于分而治之的思想,用于大規模數據集(大于1TB) 的并行計算和離線計算,具有如下特點:
高度抽象的編程思想:程序員僅需描述做什么,具體怎么做交由系統的執行框架處理。
良好的擴展性:可通過添加節點以擴展集群能力。
高容錯性:通過計算遷移或數據遷移等策略提高集群的可用性與容錯性。
資源調度與分配
在Hadoop1.0版本中,只有HDFS和MapReduce, 而資源調度通過MRv1來進行,存在著很多缺陷:
master是單點, 故障恢復依賴于周期性的checkpoint,不保證可靠性,發生故障的時候會通知用戶,由用戶自行決定是否重新計算。
沒有區分作業調度與資源調度。MR在運行時,環境會有大量的Job并發,因此多樣且高效的調度策略是非常重要的。
沒有提到資源隔離與安全性,大量Job并發的時候,如何保證單個Job不占用過多的資源,如何保證用戶的程序對系統而言是安全的,在Hadoop 1.0中是個大問題。
因此,針對Hadoop1.0中MRv1的不足,以及為了滿足編程范式多樣化的需求,Hadoop2.0中正式引入了Yarn框架,以便更好地完成集群的資源調度與分配。
Yarn概述
Apache Hadoop YARN (Yet Another Resource Negotiator), 中文名為“另一 種資源協調者"。它是一一種新的Hadoop資源管理器,它是一個通用資源管理系統,可為上層應用提供統- -的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。
引入了Yarn之后,它可以支持了多種計算模式,比如說離線計算、實時計算以及迭代計算。
二、MapReduce和Yarn功能與架構
MapReduce過程
顧名思義,MapReduce計算過程可具體分為兩個階段,Map階段和Reduce階段。其中,Map階段輸出的結果就是Reduce階段的輸入。
可以把MapReduce理解為, 把一堆雜亂無章的數據按照某種特征歸納起來,然后處理并得到最后的結果
Map面對的是雜亂無章的互不相關的數據,它解析每個數據,從中提取出key和value.也就是提取了數據的特征。
到了Reduce階段, 數據是以key后而跟著若干個value來組織的, 這些value有相關性。在此基礎上我們可以做進一步的處理以便得到結果。
輸入是hdfs的一個文件,對這個大的文件按照某種規則可以劃分成若干個分片。這里的這個分片跟我們hdfs的block文件,block的大小是有區別的,一般情況下默認一個分片的大小跟一個block的大小它是相等的。但是如果說我們用戶自定義會有區別,一般情況下我們有多少個分片就會來產生多少個map任務。在map和reduce中間,實際上有另外一個操作叫shuffle操作。這個shuffle操作中文翻譯成洗牌。實際上在MapReduce中,并不是把數據洗的沒有規律,而是把數據洗得有規律。然后這個經過了就是分區和有序的數據再傳給reduce分別進行了處理,最后得到輸出結果。可以發現map它的任務的個數跟分片的個數相等,而request的個數跟其他的一些設置有關系。
Map階段詳解
Job提交前,先將待處理的文件進行分片(Split)。MR框架默認將一 個塊(Block) 作為一個分片。客戶端應用可以重定義塊與分片的映射關系。
Map階段先把數據放入一個環形內存緩沖區,當緩沖區數據達到80%左右時發生溢寫(Spill),需將緩沖區中的數據寫入到本地磁盤。
Reduce階段詳解
前面提到的MOF文件是經過排序處理的。當Reduce Task接收的數據量不大時,則直接存放在內存緩沖區中,隨著緩沖區文件的增多,MR后臺線程將它們合并成一個更大的有序文件,這個動作是Reduce階段的Merge操作,過程中會產生許多中間文件,最后一次合并的結果直接輸出到用戶自定義的reduce函數。
當數據很少時,不需要溢寫到磁盤,直接在緩存中歸并,然后輸出給Reduce。
Shuffle過程詳解
Shuffle的定義: Map階段和Reduce階段之間傳遞中間數據的過程,包括ReduceTask從各個Map Task獲取MOF文件的過程,以及對MOF的排序與合并處理
shuffle的本意是洗牌、混洗的意思,把一組有規則的數據盡量打亂成無規則的數據。而在MapReduce中,shuffle更像是洗牌的逆過程,指的是將map端的無規則輸出按指定的規則“打亂”成具有一定規則的數據,以便reduce端接收處理。其在MapReduce中所處的工作階段是map輸出后到reduce接收前,具體可以分為map端和reduce端前后兩個部分。在shuffle之前,也就是在map階段,MapReduce會對要處理的數據進行分片(split)操作,為每一個分片分配一個MapTask任務。接下來map()函數會對每一個分片中的每一行數據進行處理得到鍵值對(key,value),其中key為偏移量,value為一行的內容。此時得到的鍵值對又叫做“中間結果”。此后便進入shuffle階段,由此可以看出shuffle階段的作用是處理“中間結果”。
Word Count 顧名思義就是對單詞進行計數,首先會對文件中的單詞做統計計數,然后輸出出現次數最多的 單詞。
單詞計數是最簡單也是最能體現MapReduce思想的程序之一,可以稱為MapReduce版"Hello World",該程序的完整代碼可以在Hadoop安裝包的"src/examples"目錄下找到。單詞計數主要完成功能是:統計一系列文本文件中每個單詞出現的次數
分別通過map和reduce方法統計文本中每個單詞出現的次數,然后按照字母的順序排列輸出,Map過程首先是多個map并行提取多個句子里面的單詞然后分別列出來每個單詞,出現次數為1,全部列舉出來。
Reduce過程首先將相同key的數據進行查找分組然后合并,比如對于key為Hello的數據分組為:
Yarn的組件架構
Yarn 從整體上還是屬于 master/slave 模型,主要依賴于三個組件來實現功能,第一個就是 ResourceManager,是集群資源的仲裁者,它包括兩部分:一個是可插拔式的調度 Scheduler,一個是 ApplicationManager,用于管理集群中的用戶作業。第二個是每個節點上的 NodeManager,管理該節點上的用戶作業和工作流,也會不斷發送自己 Container 使用情況給 ResourceManager。第三個組件是 ApplicationMaster,用戶作業生命周期的管理者它的主要功能就是向 ResourceManager(全局的)申請計算資源(Containers)并且和 NodeManager 交互來執行和監控具體的 task。
MapReduce On Yarn任務調度流程
1、客戶端請求提交一個MR任務
2、resourcemanger返回提交程序資源的路徑
3、yarn客戶端提交job資源
4、通知MR提交完畢
5、resourcemanger將請求封裝成task
6、啟動MR的AppMaster
7、AppMaster申請資源啟動nodemanager
在整個資源管理框架中,ResourceManager為Master,NodeManager為Slave,ResourceManager負責對各個NodeManager上的資源進行統一管理和調度。當用戶提交一個應用程序時,需要提供一個用以跟蹤和管理這個程序的ApplicationMaster,它負責向ResourceManager申請資源,并要求NodeManger啟動可以占用一定資源的任務。由于不同的ApplicationMaster被分布到不同的節點上,因此它們之間不會相互影響。
Yarn HA方案
Yarn中的ResourceManager負責整個集群的資源管理和任務調度,Yarn高可用性方案通過引入冗余的ResourceManager節點的方式,解決了ResourceManager單點故障問題。
Yarn AppMaster容錯機制
當resourcemanger接收到客戶端的發送的任務執行請求之后,他會為這個任務去分配ApplicationMaster,而ApplicationMaster主要是負責后續的任務的監控與調度,但是ApplicationMaster在節點上去運行不一定會成功。當失敗的時候怎么辦?它會在其他的節點上另外啟動一個容器,然后讓新的ApplicationMaster進行運行。
三、Yarn的資源管理和任務調度
資源管理
每個NodeManager可分配的內存和CPU的數量可以通過配置選項設置(可在Yarn服務配置頁面配置)。
yarn.nodemanager.resource .memory mb:可以分配給容器的物理內存的大小
yarn.nodemanager.vmem pmem ratio:虛擬內存跟物理內存的比值
yarn.nodemanager.resource.pu vcore: 可分配給容器的CPU核數
在Hadoop3.x版本中, YARN資源模型已被推廣為支持用戶自定義的可數資源類型(support user -defined countable resource types ),而不是僅僅支持CPU和內存。
常見的可數資源類型,除了CPU和Memory以外,還包括GPU資源、軟件licenses或本 地附加存儲器( lcally atached storage)之類的資源,但不包括端口(Ports) 和標簽(Labels)。
YARN的三種資源調度器
在Yarn中, 負責給應用分配資源的叫做Scheduler (調度器)。在YARN中,根據不同的策略,共有三種調度器可供選擇:
FIFO Scheduler:把應用按提交的順序排成一個隊列,這是一個先進先出隊列,在進行資源分配的時候,先給隊列中最頭上的應用進行分配資源,待最頭上的應用需求滿足后再給下一個分配,以此類推。
Capacity Scheduler: 允許多個組織共享整個集群,每個組織可以獲得集群的-部分計算能力。通過為每個組織分配專門]的隊列,然后再為每個隊列分配-一定的集群資源,通過設置多個隊列的方式給多個組織提供服務。除此之外,隊列內部又可以垂直劃分,這樣-個組織內部的多個成員就可以共享這個隊列資源了。在-一個隊列內部,資源的調度是采用的是FIFO策略。
Fair Scheduler:為所有的應用分配公平的資源(對公平的定義可以通過參數來設置)。
容量調度器的介紹
容量調度器使得Hadoop應用能夠共享的、多用戶的、操作簡便的運行在集群上,同時最大化集群的吞吐量和利用率。
容量調度器以隊列為單位劃分資源,每個隊列都有資源使用的下限和.上限。每個用戶可以設定資源使用上限。管理員可以約束單個隊列、用戶或作業的資源使用。支持作業優先級,但不支持資源搶占。
在Hadoop 3.x中,OrgQueue 擴展了容量調度器,通過REST API提供了以編程的方式來改變隊列的配置。這樣,管理員可以在隊列的administer_ _queue ACL中自動進行隊列配置管理。
資源分配模型
●調度器維護一群隊列的信息。用戶可以向一個或者多個隊列提交應用。
●每次NM心跳的時候,調度器根據一定的規則選擇一一個隊列, 再在隊列上選擇一個應用,嘗試在這個應用上分配資源。
●調度器會優先匹配本地資源的申請請求,其次是同機架的,最后是任意機器的。
在YARN的資源分配過程中,其采用了雙層資源調度模型:
在第一層中,ResourceManager中的資源調度器將資源分配給各個ApplicationMaster;
在第二層中,ApplicationMaster再進一步將資源分配給它內部的各個任務;
YARN的資源分配過程是異步的,也就是說,資源調度器將資源分配給一個應用程序后,它不會立刻push給對應的ApplicationMaster,而是暫時放到一個緩沖區中,等待ApplicationMaster通過周期性的心跳主動來取(pull-based通信模型)
YARN采用了增量資源分配機制(當應用程序申請的資源暫時無法保證時,為應用程序預留一個節點上的資源直到累計釋放的空閑資源滿足應用程序需求),這種機制會造成浪費,但不會出現餓死現象;
YARN資源調度器采用了主資源公平調度算法,DRF的基本設計思想則是將最大最小化公平算法應用于主資源上,進而將多維資源調度問題轉化為單資源調度問題,即DRF總是最大化所有主資源中最小的;
四、Yarn增強特性
在華為大數據平臺中它支持動態內存管理。對于container,在原始的Yarn版本中呢,如果說一個computer它使用內存的容量超過了container所設定的內存容量閾值,這時候呢這個作業就會失敗。為了去降低這個作業失敗的這個幾率,我們的華為大數據采用了一種的動態內存管理機制,允許了就是所有的container超過它設定的閾值,只要這個節點中所有的container它的內存的。容量總和不超過了這個節點所設定的內存的閾值,那么它還是會允許這個container繼續進行運行,因此減少了做用戶作業失敗的可能性。
在原始的Yarn資源管理調度平臺中,對容器的放置是沒有考慮的,比如說有些容器它可能隨機的、隨機的或者按照某個規律分配到某一個節點上,但是這一個節點有可能它內存空間比較小。內存容量比較有限,因為這這個容器它會占用比較多的內存,因此放置放置到這個節點上,它容易造成了內存的溢出。因此華為大數據平臺基于這個原因對Yarn進行了優化,它會讓用戶隊列去綁定的一定的標簽,放置到這個用戶隊列的應用進行了任務調度的時候,就會把相應的任務放置到適合的節點上。比如說一些常規的資源需求的應用,放到了普通的性能的服務器上。比如說一些高內存需求的應用,就放到高內存需求應用這樣一個標簽隊列里面去,他就會分配到了高內存的機器或服務器上去運行這個容器。
總結:
本章首先講述了MapReduce和Yarn的應用場景和基本架構,然后講解了Yarn資源管理與任務調度的原理,最后介紹了華為MRS集群中對于Yarn的增強特性。
學習推薦
華為Learning網站:?https://support.huawei.com/learning
華為e學云:?https://support.huawei.com/learning/elearning
華為Support案例庫:https://support.huawei.com/enterprise
本文整理自華為云社區【內容共創系列】活動。
查看活動詳情:https://bbs.huaweicloud.com/blogs/314887
相關任務詳情:MapReduce和Yarn技術原理
MapReduce Yarn
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。