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将会越来越容易。