什么是YARN?跟HBase和Spark比优势在哪?终于有人讲明白了
導讀:HBase沒有資源什么事情也做不了,Spark占用了資源卻沒有事情可做?YARN了解一下。
作者:朱凱
來源:大數據DT(ID:hzdashuju)
01?概述
隨著Hadoop生態的發展,開源社區出現了多種多樣的技術組件。有用來構建數據倉庫的Hive,也有基于內存的計算框架Spark,還有我們之前介紹過的NoSQL數據庫HBase等。
這些技術組件的出現,極大地豐富了大數據的生態體系,但同時也引出了一些新的問題。作為一個大數據底層支撐平臺,同時部署Hive、HBase和Spark等多種技術組件是一件十分平常的事情。這些為大數據場景設計的技術組件可以說個個都是消耗資源的大戶,這些資源包括服務器的CPU和內存。
通常這些技術組件都有一套自己的資源調度系統用來管理任務的資源分配,但當它們同時部署在一起的時候就出問題了。這時會有兩種情況產生,第一種情況是某些組件可能申請不到服務器資源。
比如一臺擁有32G內存的服務器同時部署了HBase和Spark,HBase的RegionServer啟動時占用了20GB內存,這時Spark開始執行某個任務也需要使用20GB內存,但這時發現沒有足夠的內存資源使用了。因為從每個組件獨立的視角來看他們都認為自己能使用100%的服務器資源,但服務器資源的總量就那么多,不可能同時滿足所有組件的需求。
第二種是可能會出現資源分配不合理的情況,導致整體資源使用率偏低。我們同樣用剛才的場景舉例,Spark啟動了一個任務申請使用30GB的內存,但是實際上它的程序邏輯并不需要使用這么多資源。這就出現了一種HBase沒有資源什么事情也做不了,但Spark占用了資源卻沒有事情可做的局面。
為了解決類似的問題,我們需要一種通用的資源調度框架,對整個集群的資源進行統籌管理。
YARN就是一款優秀的集群資源調度框架。YARN是Yet Another Resource Negotiator的縮寫,它是Hadoop的第二代集群資源調度框架。
解決了Hadoop第一代集群資源調度框架上可靠性差、擴展性差等一系列問題,同時YARN從MapReduce中完全獨立出來,從專門支撐MapReduce任務調度升級成為了一個支持多種應用類型的通用集群資源調度框架。
除了MapReduce之外,Spark、Hive等一系列服務都可以作為應用運行在YARN之上,統一使用YARN為整個集群資源進行宏觀的調度與分配,如圖2-12所示。
▲圖2-12 YARN的邏輯結構
02 資源模型和Container
YARN將服務器資源進行了抽象封裝,它使用Container對象代表申請資源的基本單元。
這些資源包括資源名稱(服務器名稱、機架等)、內存和CPU,YARN通過Container機制將服務器資源進行了隔離。每個應用都可以通過ApplicationMaster向ResourceManager申請資源,當ApplicationMaster向ResourceManager申請資源時,ResourceManager返回的資源使用Container的個數來表示,比如一個Spark計算任務需要5個Container資源。
03 ResourceManager
ResourceManager是一個全局的資源管理器,負責整個系統的資源管理和分配以保證整個集群的高效運行。它會根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。
ResourceManager只負責根據各個應用程序的資源請求進行資源分配,不參與任何與具體應用程序相關的工作,比如不負責監控或者跟蹤應用的執行狀態等,也不負責重新啟動因應用執行失敗或者硬件故障而產生的失敗任務,這些均交由應用程序相關的ApplicationMaster完成。資源分配單位用的是我們剛才介紹過的Container對象。
此外,ResourceManager還支持一個可插拔的調度器插件來支持多種資源調度策略,比如使用公平調度或是容量調度。
04 ApplicationMaster
每一個想要運行在YARN上的應用都必須有一個相應的ApplicationMaster實現,應用將內部的任務調度邏輯和監控都交由它們自己的ApplicationMaster實現類來處理。
ApplicationMaster是YARN的一個創新設計,YARN通過這種機制將自己打造成了一個擴展性極強的通用資源調度框架,因為它允許用戶開發自己的ApplicationMaster實現。
ApplicationMaster進程在運行的過程中主要負責與ResourceManager進行通信,以申請執行任務時所需要的資源,在申請到資源之后再進一步執行自身內部的調度任務。同時ApplicationMaster也負責監控自己運行的內部任務狀態,在任務失敗的時候重新為任務申請相應資源并重啟任務。
ApplicationMaster通常作為一個應用的主進程,主要用來扮演拆分子任務、匯總結果數據這類的總體調度,比如Spark的Driver進程。而真正的執行程序業務邏輯的進程是在NodeManager進程上執行的。
05 NodeManager
NodeManager是每個服務器節點上資源管理器,負責管理自己所處服務器Containers的整個生命周期。
在YARN上運行的應用最終的邏輯執行程序(比如Spark的task、MapReduce的job)都會在NodeManager的Container中運行,可以說NodeManager是YARN計算節點的代理,因為ResourceManager只會將任務分配到啟動了NodeManager進程的服務器。
當NodeManager進程啟動的時候它會向ResourceManager進行注冊,并定時匯報自己所在服務器的資源使用情況和Container運行狀態,同時它也接受并處理來自ApplicationMaster的Container啟動和停止等各種請求。
06 單一集群架構
通過上面的介紹我們不難發現,ResourceManager、NodeManager和Container組件都不關心具體的應用程序或任務的類型,只有ApplicationMaster才是應用類型相關的。
YARN通過使用開放ApplicationMaster的集成方式,允許第三方應用框架便捷的和YARN進行集成。這才有了像MapReduce On YARN、Storm On YARN、Spark On YARN和Tez On YARN等眾多第三方應用集成方案的出現。
通過這種資源共享的單一集群架構,我們在企業內部可以實現服務器資源真正的共享使用,以達到降低技術集成成本和增強資源整體利用率的目的。
07 工作流程
接下來我們簡單看一下YARN的整個工作過程,如圖2-13所示。
用戶向YARN中提交應用程序。
ResourceManager為該應用程找到一個可用的NodeManager并分配第一個Container,然后在這個Container中啟動應用程序的ApplicationMaster。
ApplicationMaster向ResourceManager進行注冊,這樣用戶就可以通過ResourceManager查看應用程序的運行狀態并對任務進行監控。
ApplicationMaster采用輪詢的方式通過RPC協議向ResourceManager申請和領取資源。
ApplicationMaster申請到資源后與對應的NodeManager通信,要求它啟動Container并為任務設置好運行環境。
應用程序的任務開始在啟動的Container中運行,各個任務向ApplicationMaster匯報自己的狀態和進度,以便ApplicationMaster隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啟動任務。
應用在運行的過程中,客戶端通過輪詢的方式主動與ApplicationMaster通信以獲得應用的運行狀態、執行進度等信息。
應用程序運行完成后,ApplicationMaster向ResourceManager注銷并關閉自己。
▲圖2-13 YARN的工作流程
08 使用場景
基于YARN擴展性強、可靠性強、支持多用戶和支持多應用的特點,它非常適合于支撐企業內部構建統一的資源共享型大數據平臺。借助YARN我們可以真正實現通過一套資源調度系統集成所有應用組件的單一大集群架構。
1. Spark任務調度
Spark是一款分布式內存計算框架,Spark可以將自身的任務調度部分委托YARN進行管理,從而實現集群資源高效整合與利用。
2. MapReduce任務調度
同樣的,MapReduce任務的整個生命周期都可以借助YARN進行管理,包括任務的分配、資源的調度,等等。
關于作者:朱凱,資深大數據專家和架構師,擁有10年IT從業經驗,精通大數據、Java、Node.JS等技術。對大數據領域的主流技術與解決方案有深入研究,擅長分布式系統的架構設計與整合。曾主導過多款大數據平臺級產品的規劃設計與研發工作,一線實戰經驗豐富。
本文摘編自《企業級大數據平臺構建:架構與實現》,經出版方授權發布。
延伸閱讀《企業級大數據平臺構建:架構與實現》
點擊上圖了解及購買
轉載請聯系微信:DoctorData
推薦語:資深大數據專家/一線架構師20000小時實際工作經驗總結。以橫向視角出發,拉通Hadoop體系技術棧,手把手教你快速構建一個真實可用、安全可靠的企業級大數據平臺。
劃重點????
干貨直達????
終于有人把大數據講明白了
盤點谷歌、Facebook和IBM的重磅AI項目
為什么微服務化、數據倉庫都不是中臺?
Python條件判斷語句詳解:if、else、switch都有了
更多精彩????
在公眾號對話框輸入以下關鍵詞
查看更多優質內容!
PPT?|?讀書?|?書單?|?硬核?|?干貨?|?講明白?|?神操作
大數據?|?云計算?|?數據庫?|?Python?|?可視化
AI?|?人工智能?|?機器學習?|?深度學習?|?NLP
5G?|?中臺?|?用戶畫像?|?1024?|?數學?|?算法?|?數字孿生
據統計,99%的大咖都完成了這個神操作
????
總結
以上是生活随笔為你收集整理的什么是YARN?跟HBase和Spark比优势在哪?终于有人讲明白了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从AI到IA,你愿意买一个机器人伴侣同居
- 下一篇: 2.14情人节,程序员该如何绝地反击?