Hadoop向用戶提供了三種能力:分布式文件系統(tǒng)HDFS、分布式計(jì)算模式MapReduce和資源調(diào)度框架YARN。由于Hadoop的影響力較大,在大數(shù)據(jù)圈里一直把“應(yīng)用 on YARN”作為一個(gè)門檻條件,由YARN統(tǒng)一對(duì)資源管理和調(diào)度,實(shí)現(xiàn)應(yīng)用和租戶的資源隔離。很多人把YARN當(dāng)成是Hadoop圈里面的K8S。接下向大家介紹應(yīng)用程序如何部署到Y(jié)ARN上面去。

整體交互圖
應(yīng)用為了能夠跑在YARN上,需要編寫客戶端程序和ApplicationMaster程序。
客戶端應(yīng)用程序,即上圖中的Client:
1.向Resource Manager發(fā)消息,獲取應(yīng)用ID;
2.構(gòu)造Application Master運(yùn)行時(shí)所需要的上下文,包括應(yīng)用ID、啟動(dòng)的命令、依賴的JAR文件、需要的資源等;
3.向Resource Master提交Application Master。Resouce Master會(huì)選擇一個(gè)Node Manager啟動(dòng)Application Master;
4.向Resource Master發(fā)消息,查詢Application Master的運(yùn)行狀態(tài)或者殺掉應(yīng)用程序;
Client可以通過與Resource Manager交互獲取Application Master的狀態(tài),但是為了減輕Resource Manager的負(fù)擔(dān),一般Client直接與Application Master通信,查詢其狀態(tài)。
ApplicationMaster程序:
1.向Resouce Manager注冊(cè)自己;
2.向Resource Manager申請(qǐng)資源,需要注意的時(shí),申請(qǐng)資源的接口也是心跳的接口,所以Application Master在運(yùn)行期間需要周期性地調(diào)用申請(qǐng)資源的接口;
3.Application Master收到分配的資源信息后,向Node Manager發(fā)送啟動(dòng)容器的請(qǐng)求,Node Manager啟動(dòng)容器;
4.Application Master周期性地向Node Manager發(fā)送消息,查詢?nèi)萜鬟\(yùn)行狀態(tài),當(dāng)發(fā)現(xiàn)容易運(yùn)行失敗時(shí),可以嘗試重啟容器;
5.當(dāng)任務(wù)運(yùn)行完成后,Application Master向Node Manager發(fā)送停止容器的請(qǐng)求,釋放資源;
6.Application Master向Resource Manager發(fā)送應(yīng)用完成的消息;
YARN應(yīng)用整體的運(yùn)行過程大體如上??梢钥闯觯粋€(gè)應(yīng)用要跑在YARN上,需要做很多事情。目前開源社區(qū)為了方便應(yīng)用上YARN,推出了YARN Service服務(wù)。這個(gè)服務(wù)幫用戶做了很多事情,包括上面提到的客戶端程序和Application Master,還有應(yīng)用狀態(tài)的監(jiān)控,故障后重新拉起等。YARN Service對(duì)外提供命令行工具和REST API。用戶編寫自己的應(yīng)用程序描述文件,通過YARN Service提供的接口提交這份文件。YARN Service會(huì)按照描述文件分配指定的資源、啟動(dòng)指定數(shù)據(jù)的應(yīng)用實(shí)例。應(yīng)用程序上YARN將會(huì)越來越容易。