Hadoop向用戶提供了三種能力:分布式文件系統HDFS、分布式計算模式MapReduce和資源調度框架YARN。由于Hadoop的影響力較大,在大數據圈里一直把“應用 on YARN”作為一個門檻條件,由YARN統一對資源管理和調度,實現應用和租戶的資源隔離。很多人把YARN當成是Hadoop圈里面的K8S。接下向大家介紹應用程序如何部署到YARN上面去。
整體交互圖
應用為了能夠跑在YARN上,需要編寫客戶端程序和ApplicationMaster程序。
客戶端應用程序,即上圖中的Client:
1.向Resource Manager發消息,獲取應用ID;
2.構造Application Master運行時所需要的上下文,包括應用ID、啟動的命令、依賴的JAR文件、需要的資源等;
3.向Resource Master提交Application Master。Resouce Master會選擇一個Node Manager啟動Application Master;
4.向Resource Master發消息,查詢Application Master的運行狀態或者殺掉應用程序;
Client可以通過與Resource Manager交互獲取Application Master的狀態,但是為了減輕Resource Manager的負擔,一般Client直接與Application Master通信,查詢其狀態。
ApplicationMaster程序:
1.向Resouce Manager注冊自己;
2.向Resource Manager申請資源,需要注意的時,申請資源的接口也是心跳的接口,所以Application Master在運行期間需要周期性地調用申請資源的接口;
3.Application Master收到分配的資源信息后,向Node Manager發送啟動容器的請求,Node Manager啟動容器;
4.Application Master周期性地向Node Manager發送消息,查詢容器運行狀態,當發現容易運行失敗時,可以嘗試重啟容器;
5.當任務運行完成后,Application Master向Node Manager發送停止容器的請求,釋放資源;
6.Application Master向Resource Manager發送應用完成的消息;
YARN應用整體的運行過程大體如上。可以看出,一個應用要跑在YARN上,需要做很多事情。目前開源社區為了方便應用上YARN,推出了YARN Service服務。這個服務幫用戶做了很多事情,包括上面提到的客戶端程序和Application Master,還有應用狀態的監控,故障后重新拉起等。YARN Service對外提供命令行工具和REST API。用戶編寫自己的應用程序描述文件,通過YARN Service提供的接口提交這份文件。YARN Service會按照描述文件分配指定的資源、啟動指定數據的應用實例。應用程序上YARN將會越來越容易。