Hadoop生態(tài)組件Yarn之長期運行服務(wù)支持篇!
眾所周知,Yarn是大數(shù)據(jù)核心調(diào)度組件,其使用覆蓋率非常高。在“Hadoop是否已失寵”的選題調(diào)研中,不少專家都對Yarn這一核心組件的生命力表達了自己的看法。
阿里云技術(shù)專家封神認(rèn)為,Yarn在離線與在線數(shù)據(jù)混合方面表現(xiàn)欠佳,但這也是其背景使然,支持Yarn的幾家公司主要做離線系統(tǒng),對在線系統(tǒng)部署問題關(guān)注不夠。當(dāng)然,目前市場已經(jīng)存在具備一定競爭關(guān)系的產(chǎn)品,比如Mesos,但這兩大調(diào)度系統(tǒng)的設(shè)計目標(biāo)并不完全相同,并且Yarn也在朝著Mesos的領(lǐng)域進軍。
百分點集團技術(shù)副總裁兼首席架構(gòu)師劉譯璟認(rèn)為,Yarn與Hadoop平臺的綁定過于密切,而實際上,我們有很多資源調(diào)度管理方法可供選擇,比如Kubernetes等,對各種應(yīng)用的支持某種程度上比Yarn更完善,無論是外部類型應(yīng)用,大數(shù)據(jù)應(yīng)用還是機器學(xué)習(xí)應(yīng)用均可處理。
雖然在大數(shù)據(jù)應(yīng)用層面不盡完美,但Yarn在支持長期運行服務(wù)方面具有很大優(yōu)勢,這是Yarn社區(qū)耗時一年一直在努力做的事情,本文主要介紹該服務(wù)的特點和具體使用方法。
Apache Hadoop 3.1功能——Yarn服務(wù)框架!
所謂長期運行服務(wù)支持,主要針對長期占用較多資源的應(yīng)用,我們將該功能稱之為Yarn服務(wù)框架。2017年11月,這一功能被整合到工具箱,總共經(jīng)歷了108個提交,代碼更改了33539行。該功能主要包括以下內(nèi)容:
1、在Yarn上運行的核心框架(ApplicationMaster),作為容器協(xié)調(diào)工具,負(fù)責(zé)管理所有服務(wù)的生命周期。
2、RESTful API服務(wù),供用戶使用簡單的JSON規(guī)范在Yarn上部署和管理服務(wù)。
3、由Yarn服務(wù)注冊表支持的Yarn DNS服務(wù)器,可通過其標(biāo)準(zhǔn)DNS在Yarn上查找服務(wù)。
4、高級容器設(shè)置計劃,例如每個應(yīng)用程序的容器大小調(diào)整和節(jié)點標(biāo)簽。
5、集裝箱升級和整體服務(wù)。
6、Yarn服務(wù)框架與一些其他功能:
- 對Docker的支持;
- 基于HBase的本地Yarn時間線服務(wù),用于記錄生命周期事件和指標(biāo),并為用戶提供豐富的分析API以獲取、查詢應(yīng)用程序詳細(xì)信息;
- Yarn UI2中的Services UI。
Yarn上管理服務(wù)的大部分復(fù)雜性都是對用戶隱藏的。用戶僅處理JSON規(guī)范,并通過CLI或REST API部署和管理在Yarn上運行的服務(wù)。以下是在Yarn上部署httpd容器的JSON規(guī)范示例。用戶只需通過REST API或使用CLI發(fā)布此JSON規(guī)范,系統(tǒng)將自動處理其余內(nèi)容——啟動和監(jiān)視容器或進行應(yīng)用程序運行所需的所有操作,如容器自動重啟(如果失敗)。例如:
1、啟動服務(wù),請使用提供的JSON運行以下命令

2、獲取應(yīng)用程序狀態(tài)
- yarn app -status my-httpd
3、將容器數(shù)量設(shè)置為3:
- yarn app -flex my-httpd -component httpd 3
4、停止服務(wù):
- yarn app -stop my-httpd
5、重啟已經(jīng)停止的服務(wù):
- yarn app -start my-httpd
下圖展示了Yarn集群在支持長期運行服務(wù)時涉及的主要組件:

由圖可見,典型的工作流程是:
- User向Yarn Service REST API發(fā)布描述服務(wù)規(guī)范的JSON請求,例如容器內(nèi)存大小、CPU核心數(shù)、Docker鏡像ID等。同樣,用戶也可以使用Yarn CLI提交服務(wù)并創(chuàng)建請求;
- RM在接受請求后,啟動ApplicationMaster(即容器編排框架);
- 業(yè)務(wù)流程框架從RM請求資源(一定要遵守用戶的資源需求),然后分配容器,在NodeManager上啟動容器;
- NodeManager依次啟動容器進程(用戶代碼所在的位置)或使用Docker容器運行時啟動Docker容器;
- 業(yè)務(wù)流程框架監(jiān)視容器的健康狀況和準(zhǔn)備情況,并對容器的故障或錯誤采取行動。它將服務(wù)的生命周期事件和指標(biāo)寫入Yarn時間線服務(wù)(由HBase支持),將附加服務(wù)元信息(例如容器IP和主機)寫入由ZooKeeper支持的Yarn服務(wù)注冊表中;
- Registry DNS服務(wù)器偵聽ZooKeeper中的znode創(chuàng)建或刪除,并創(chuàng)建各種DNS記錄,例如A record和Service Record,以提供DNS查詢;
根據(jù)JSON規(guī)范和YARN配置中提供的信息,為每個Docker容器提供用戶友好的主機名。然后,客戶端可以使用標(biāo)準(zhǔn)DNS通過容器主機名查找容器IP。
Yarn已被證明可以很好地支持MapReduce和Spark等批量處理工作負(fù)載,此功能還可以將現(xiàn)有的基于容器的服務(wù)引入Yarn。用戶可以使用單個集群來運行批處理作業(yè)和支持長時間運行服務(wù),這還可以實現(xiàn)批處理作業(yè)和服務(wù)之間的資源共享,服務(wù)通常在白天運行,而批處理作業(yè)通常在夜間運行,這樣的資源共享極大地提高了整體集群的利用率;支持kerberos安全性,可以與標(biāo)準(zhǔn)的kerberized Hadoop集群很好地配合;除了docker容器化應(yīng)用程序外,它還支持標(biāo)準(zhǔn)的tar打包應(yīng)用程序。
在Hadoop生態(tài)系統(tǒng)中存在超過十年,Yarn已經(jīng)成長為一個較成熟的項目,并在很多企業(yè)內(nèi)部大規(guī)模應(yīng)用。此外,Yarn Container Orchestration Framework利用了Hadoop生態(tài)中所有的穩(wěn)定功能,這讓Yarn成為Hadoop使用者的首要選擇。正如開篇兩位技術(shù)專家所言,Yarn并不是最完善的資源調(diào)度工具,但它與Hadoop生態(tài)綁定甚緊并與其中的組件完美整合,這就是Yarn最大的優(yōu)勢之一。