转自:https://blog.csdn.net/lb812913059/article/details/79921723
addition:
yarn的web interface:http://192.168.2.199:8088/cluster
yarn default configure:http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
???????
原文:
在yarn上写应用程序并不同于我们熟知的MapReduce应用程序,必须牢记yarn只是一个资源管理的框架,并不是一个计算框架,计算框架可以运行在yarn上。
我们所能做的就是向RM申请container,然后配合NM一起来启动container。就像MRv2一样,jobclient请求用于MR AM运行的container,设置环境变量和启动命令,然后交由NM去启动MR AM,随后map/reduce task就由MR AM全权负责,当然task的启动也是由MR AM向RM申请container,然后配合NM一起来启动的。
所以要想在yarn上运行非特定计算框架的程序,我们就得实现自己的client和applicationMaster。另外我们自定义的AM需要放在各个NM的classpath下,因为AM可能运行在任何NM所在的机器上。
YARN工作流程
要使用一个YARN集群,首先需要来自包含一个应用程序的客户的请求。ResourceManager 协商一个容器的必要资源,启动一个 ApplicationMaster 来表示已提交的应用程序。通过使用一个资源请求协议,ApplicationMaster 协商每个节点上供应用程序使用的资源容器。执行应用程序时,ApplicationMaster 监视容器直到完成。当应用程序完成时,ApplicationMaster 从 ResourceManager 注销其容器,执行周期就完成了。
-
Client向ResourceManager中ApplicationsManager(AsM)提交一个应用程序
-
AsM向Scheduler请求一个供ApplicationMaster运行的container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster
-
ApplicationMaster启动后向AsM注册,这样Client即可以从AsM获取到AM相关的信息,并直接与AM进行通信,然后ApplicationMaster为各个任务申请资源,并监控它们的运行状态,直到运行结束,即重复步骤4-7
-
ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源
-
一旦ApplicationMaster成功申请到资源container,便开始与对应的NodeManager通信,要求它启动任务
-
NodeManager为任务设置好运行环境,即资源本地化(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
-
各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,从而可以在任务失败时申请新的container重新启动任务
-
当每个task完成后,ApplicationMaster运行OutputCommitter的cleanup指令进行一些收尾工作,通过RPC协议向ResourceManager注销并关闭自己