更快、更強——解析Hadoop新一代MapReduce框架Yarn

2021-01-11 CSDN技術社區

編者按:對於業界的大數據存儲及分布式處理系統來說,Hadoop 是耳熟能詳的卓越開源分布式文件存儲及處理框架,對於 Hadoop 框架的介紹在此不再累述,隨著需求的發展,Yarn 框架浮出水面, @依然光榮復興的 博客給我們做了很詳細的介紹,讀者通過本文中新舊 Hadoop MapReduce 框架的對比,更能深刻理解新的 yarn 框架的技術原理和設計思想。

背景

Yarn是一個分布式的資源管理系統,用以提高分布式的集群環境下的資源利用率,這些資源包括內存、IO、網絡、磁碟等。其產生的原因是為了解決原MapReduce框架的不足。最初MapReduce的committer們還可以周期性的在已有的代碼上進行修改,可是隨著代碼的增加以及原MapReduce框架設計的不足,在原MapReduce框架上進行修改變得越來越困難,所以MapReduce的committer們決定從架構上重新設計MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的擴展性、可用性、可靠性、向後兼容性和更高的資源利用率以及能支持除了MapReduce計算框架外的更多的計算框架。

原MapReduce框架的不足


JobTracker是集群事務的集中處理點,存在單點故障 JobTracker需要完成的任務太多,既要維護job的狀態又要維護job的task的狀態,造成過多的資源消耗 在taskTracker端,用map/reduce task作為資源的表示過於簡單,沒有考慮到CPU、內存等資源情況,當把兩個需要消耗大內存的task調度到一起,很容易出現OOM 把資源強制劃分為map/reduce slot,當只有map task時,reduce slot不能用;當只有reduce task時,map slot不能用,容易造成資源利用不足。

Yarn架構

Yarn/MRv2最基本的想法是將原JobTracker主要的資源管理和job調度/監視功能分開作為兩個單獨的守護進程。有一個全局的ResourceManager(RM)和每個Application有一個ApplicationMaster(AM),Application相當於map-reduce job或者DAG jobs。ResourceManager和NodeManager(NM)組成了基本的數據計算框架。ResourceManager協調集群的資源利用,任何client或者運行著的applicatitonMaster想要運行job或者task都得向RM申請一定的資源。ApplicatonMaster是一個框架特殊的庫,對於MapReduce框架而言有它自己的AM實現,用戶也可以實現自己的AM,在運行的時候,AM會與NM一起來啟動和監視tasks。

ResourceManager

ResourceManager作為資源的協調者有兩個主要的組件:Scheduler和ApplicationsManager(AsM)。

Scheduler負責分配最少但滿足application運行所需的資源量給Application。Scheduler只是基於資源的使用情況進行調度,並不負責監視/跟蹤application的狀態,當然也不會處理失敗的task。RM使用resource container概念來管理集群的資源,resource container是資源的抽象,每個container包括一定的內存、IO、網絡等資源,不過目前的實現只包括內存一種資源。

ApplicationsManager負責處理client提交的job以及協商第一個container以供applicationMaster運行,並且在applicationMaster失敗的時候會重新啟動applicationMaster。下面闡述RM具體完成的一些功能。

資源調度:Scheduler從所有運行著的application收到資源請求後構建一個全局的資源分配計劃,然後根據application特殊的限制以及全局的一些限制條件分配資源。 資源監視:Scheduler會周期性的接收來自NM的資源使用率的監控信息,另外applicationMaster可以從Scheduler得到屬於它的已完成的container的狀態信息。 Application提交: client向AsM獲得一個applicationIDclient將application定義以及需要的jar包 client將application定義以及需要的jar包文件等上傳到hdfs的指定目錄,由yarn-site.xml的yarn.app.mapreduce.am.staging-dir指定 client構造資源請求的對象以及application的提交上下文發送給AsM AsM接收application的提交上下文 AsM根據application的信息向Scheduler協商一個Container供applicationMaster運行,然後啟動applicationMaster 向該container所屬的NM發送launchContainer信息啟動該container,也即啟動applicationMaster、AsM向client提供運行著的AM的狀態信息。 AM的生命周期:AsM負責系統中所有AM的生命周期的管理。AsM負責AM的啟動,當AM啟動後,AM會周期性的向AsM發送heartbeat,默認是1s,AsM據此了解AM的存活情況,並且在AM失敗時負責重啟AM,若是一定時間過後(默認10分鐘)沒有收到AM的heartbeat,AsM就認為該AM失敗了。

關於ResourceManager的可用性目前還沒有很好的實現,不過Cloudera公司的CDH4.4以後的版本實現了一個簡單的高可用性,使用了Hadoop-common項目中HA部分的代碼,採用了類似hdfs namenode高可用性的設計,給RM引入了active和standby狀態,不過沒有與journalnode相對應的角色,只是由zookeeper來負責維護RM的狀態,這樣的設計只是一個最簡單的方案,避免了手動重啟RM,離真正的生產可用還有一段距離。

NodeManager

NM主要負責啟動RM分配給AM的container以及代表AM的container,並且會監視container的運行情況。在啟動container的時候,NM會設置一些必要的環境變量以及將container運行所需的jar包、文件等從hdfs下載到本地,也就是所謂的資源本地化;當所有準備工作做好後,才會啟動代表該container的腳本將程序啟動起來。啟動起來後,NM會周期性的監視該container運行佔用的資源情況,若是超過了該container所聲明的資源量,則會kill掉該container所代表的進程。

另外,NM還提供了一個簡單的服務以管理它所在機器的本地目錄。Applications可以繼續訪問本地目錄即使那臺機器上已經沒有了屬於它的container在運行。例如,Map-Reduce應用程式使用這個服務存儲map output並且shuffle它們給相應的reduce task。

在NM上還可以擴展自己的服務,yarn提供了一個yarn.nodemanager.aux-services的配置項,通過該配置,用戶可以自定義一些服務,例如Map-Reduce的shuffle功能就是採用這種方式實現的。

NM在本地為每個運行著的application生成如下的目錄結構:


Container目錄下的目錄結構如下:


在啟動一個container的時候,NM就執行該container的default_container_executor.sh,該腳本內部會執行launch_container.sh。launch_container.sh會先設置一些環境變量,最後啟動執行程序的命令。對於MapReduce而言,啟動AM就執行org.apache.hadoop.mapreduce.v2.app.MRAppMaster;啟動map/reduce task就執行org.apache.hadoop.mapred.YarnChild。

ApplicationMaster

ApplicationMaster是一個框架特殊的庫,對於Map-Reduce計算模型而言有它自己的ApplicationMaster實現,對於其他的想要運行在yarn上的計算模型而言,必須得實現針對該計算模型的ApplicationMaster用以向RM申請資源運行task,比如運行在yarn上的spark框架也有對應的ApplicationMaster實現,歸根結底,yarn是一個資源管理的框架,並不是一個計算框架,要想在yarn上運行應用程式,還得有特定的計算框架的實現。由於yarn是伴隨著MRv2一起出現的,所以下面簡要概述MRv2在yarn上的運行流程。

MRv2運行流程:

MR JobClient向resourceManager(AsM)提交一個jobAsM向Scheduler請求一個供MR AM運行的container,然後啟動它MR AM啟動起來後向AsM註冊MR JobClient向AsM獲取到MR AM相關的信息,然後直接與MR AM進行通信MR AM計算splits並為所有的map構造資源請求MR AM做一些必要的MR OutputCommitter的準備工作MR AM向RM(Scheduler)發起資源請求,得到一組供map/reduce task運行的container,然後與NM一起對每一個container執行一些必要的任務,包括資源本地化等MR AM 監視運行著的task 直到完成,當task失敗時,申請新的container運行失敗的task當每個map/reduce task完成後,MR AM運行MR OutputCommitter的cleanup 代碼,也就是進行一些收尾工作當所有的map/reduce完成後,MR AM運行OutputCommitter的必要的job commit或者abort APIsMR AM退出。

在Yarn上寫應用程式

在yarn上寫應用程式並不同於我們熟知的MapReduce應用程式,必須牢記yarn只是一個資源管理的框架,並不是一個計算框架,計算框架可以運行在yarn上。我們所能做的就是向RM申請container,然後配合NM一起來啟動container。就像MRv2一樣,jobclient請求用於MR AM運行的container,設置環境變量和啟動命令,然後交由NM去啟動MR AM,隨後map/reduce task就由MR AM全權負責,當然task的啟動也是由MR AM向RM申請container,然後配合NM一起來啟動的。所以要想在yarn上運行非特定計算框架的程序,我們就得實現自己的client和applicationMaster。另外我們自定義的AM需要放在各個NM的classpath下,因為AM可能運行在任何NM所在的機器上。

原文連結:Yarn詳解(責編:Arron)

2014年將是雲計算與大數據實踐持續深入的一年。CSDN雲計算頻道將啟動大型在線培訓活動,歡迎大家將感興趣的話題和願意分享的經驗分享給我們(@CSDN雲計算),攜手共建中國雲計算與大數據的技術大圈子。

相關焦點

  • Hadoop資源管理與作業調度框架yarn剖析
    提到Hadoop,大家可能首先想到的是Hdfs存儲、mapreduce離線計算,Hadoop2.x推出yarn(Yet Another Resource Negotiator)之後,hadoop已搖身一變為資源管理與作業調度平臺,基於yarn可在hadoop集群上可運行mepreduce(離線計算
  • YARN琢磨不透?一篇文章帶你玩轉YARN!
    一、hadoop yarn 簡介Apache YARN(Yet Another Resource Negotiator) 是 hadoop 2.0 引入的集群資源管理系統。用戶可以將各種服務框架部署在 YARN 上,由 YARN 進行統一地管理和資源分配。二、YARN架構1.
  • Yarn 的內存分配管理機制及相關參數配置
    /RM1= 16/1 =16 個l 一旦設置,不可動態改變1.3 AM內存配置相關參數,配置的是 MR 任務相關AM1:mapreduce.map.memory.mb=1.5G #分配給 map Container 的內存大小AM2:mapreduce.reduce.memory.mb=3G #分配給 reduce Container 的內存大小l AM1、AM2 必須在
  • 資源管理與調度系統Yarn
    Configurationsyarn.nodemanager.resource.memory-mb:每個NodeManager分配的內存,這個是NM節點可分配的內存。32*14(14個NodeManager節點),共448個虛擬cpuyarn.scheduler.minimum-allocation-mb:單個容器使用的最小物理內存,這個配置會影響到單個節點上Container個數yarn.scheduler.maximum-allocation-mb:單個容器可使用的最大物理內存,推薦值和NM節點可分配內存相同,這樣任務至少能申請到一個容器yarn.scheduler.maximum-allocation-vcores
  • hadoop基礎知識介紹_hadoop是什麼語言開發的_hadoop能做什麼
    一、hadoop是什麼? (1)Hadoop是一個開發和運行處理大規模數據的軟體平臺,可編寫和運行分布式應用處理大規模數據,是Appach的一個用java語言實現開源軟體框架,實現在大量計算機組成的集群中對海量數據進行分布式計算(或專為離線和大規模數據分析而設計的)並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。
  • hadoop最新發行穩定版:DKHadoop版本介紹
    Hadoop對於從事網際網路工作的朋友來說已經非常熟悉了,相信在我們身邊有很多人正在轉行從事hadoop開發的工作,理所當然也會有很多hadoop入門新手。Hadoop開發太過底層,技術難度遠比我們想像的要大,對新手而言選擇一個合適的hadoop版本就意味著上手更快!
  • Apache Hadoop 3.0.0 GA 正式發布,要求 Java 8
    仍在使用Java 7 或更低版本的用戶必須升級至Java 8。HDFS支持糾刪碼(Erasure Coding)與副本相比糾刪碼是一種更節省空間的數據持久化存儲方法。標準編碼(比如Reed-Solomon(10,4))會有1.4 倍的空間開銷;然而HDFS副本則會有3倍的空間開銷。因為糾刪碼額外開銷主要是在重建和執行遠程讀,它傳統用於存儲冷數據,即不經常訪問的數據。
  • hadoop開發應用實例_hadoop應用開發技術實例詳解 - CSDN
    hadoop是什麼?hadoop能有哪些應用?hadoop和大數據是什麼關係?下面我們將圍繞這幾個問題詳細闡述。hadoop是什麼?Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力進行高速運算和存儲。
  • 大數據YARN核心知識點來襲
    Container是yarn中分配資源的一個單位,包括內存、CPU等資源,YARN以Container為單位分配資源。第3點:YARN應用提交過程老劉這裡簡單講講YARN的應用提交過程,主要想講的是MapReduce On Yarn這個內容。根據上面的圖,就可以看出來YARN的應用提交過程。
  • 新一代血流感染解決方案亮相CMEF 血培養更快更準確
    來源:經濟日報-中國經濟網經濟日報-中國經濟網10月19日訊(記者 朱國旺)在10月19日開幕的第83屆中國國際醫療器械博覽會(CMEF)上,作為全球領先的臨床微生物診斷行業領導者,生物梅裡埃公司帶來了新一代血流感染解決方案----全自動微生物培養儀VIRTUO和FAN+血培養瓶
  • hadoop入門基礎教程操作篇
    關於hadoop的分享此前一直都是零零散散的想到什麼就寫什麼,整體寫的比較亂吧。最近可能還算好的吧,畢竟花了兩周的時間詳細的寫完的了hadoop從規劃到環境安裝配置等全部內容。寫過程不是很難,最煩的可能還是要給每一步配圖,工程量確實比較大。
  • 知識篇:新一代的數據處理平臺Hadoop簡介
    事實上,由於其開源、低成本和和前所未有的擴展性,Hadoop正成為新一代的數據處理平臺。Hadoop是基於Java語言構建的一套分布式數據處理框架,從其歷史發展角度我們就可以看出,Hadoop一誕生,就具備高貴的血統,發展順風順水:2004年,Google發表論文,向全世界介紹了MapReduce2005年初,為了支持Nutch搜尋引擎項目,Nutch的開發者基於Google發布的MapReduce報告,在Nutch上開發了一個可工作的MapReduce應用
  • 大數據基礎知識:Hadoop分布式系統介紹
    Hadoop是Apache軟體基金會下一個開源分布式計算平臺,以hdfs(Hadoop Distributed File System)、MapReduce(Hadoop2.0加入了YARN,Yarn是資源調度框架,能夠細粒度的管理和調度任務,還能夠支持其他的計算框架,比如spark)為核心的Hadoop為用戶提供了系統底層細節透明的分布式基礎架構。
  • 大數據系列之Hadoop的資源管理模塊YARN
    CDA數據分析師 出品1、 YARN的產生在之前文章中介紹過hadoop1與hadoop2架構的區別是hadoop2將資源管理功能從MapReduce框架中獨立出來,也就是現在的YARN模塊。在沒有 YARN 之前,是一個集群一個計算框架。比如:MapReduce 一個集群、Spark 一個集群、HBase 一個集群等。
  • 銀興智能:助力廣發銀行打造Hadoop資源管理平臺
    據深圳銀興智能數據有限公司(簡稱:銀興智能)介紹,隨著廣發銀行大數據平臺hadoop集群應用場景越來越多,研發中心、數據中心、卡中心和分行等部門均在大數據平臺上進行數據開發和數據分析,由於數據開發和分析的場景各不相同,使用和購置的資源也不同。
  • 中科院團隊解析新一代CRISPR系統
    CRISPR-Cas9能夠在引導RNA的指引下,靶標並切割入侵者的遺傳物質。2012年研究者們利用這一特點,將CRISPR系統發展成了強大的基因組編輯工具。該系統使用簡單而且擴展性強,很快便成為了生物學領域最耀眼的明星。2015年人們發現,CRISPR還有一個好朋友——Cpf1。
  • hadoop入門教程,實戰hadoop準備工作(一)
    2, 表示內核允許分配超過所有物理內存和交換空間總和的內存建議vm.overcommit.memory設置為2,監聽上線128遠遠不夠,建議大於等於32768dfs.datanode.handler.count默認為3,大集群可以調整為10傳統MapReduce和yarn對比如果伺服器物理內存128G,則容器內存建議為100比較合理