我参考了这个链接,对Yarn的工作原理有了相当的了解。yarn能够运行多租户应用程序,例如mr、spark等。
关键是应用程序特定 ApplicationMaster (AM)
.
当客户机向资源管理器提交作业时,资源管理器如何知道它是什么类型的应用程序(mr、spark),从而启动相应的applicationmaster?
有人能帮助rm了解提交给它的是哪种工作吗?
编辑:
这个问题是:rm如何知道提交了什么样的作业,而不是Yarn、mr或spark之间的任何关系。
rm收到一个作业,因此它必须启动第一个运行特定于应用程序的applicationmaster的容器,因此rm如何知道提交给它的是哪种作业?
这是我要问的问题,这和它被复制的东西不一样。
1条答案
按热度按时间t9eec4r01#
Yarn不需要/不想知道在其上运行的应用程序的类型。它提供资源,运行在它上面的应用程序关心的是如何从yarn获取资源,以便运行它需要运行的东西(yarn的体系结构并不表明yarn想知道在它上面运行什么/如何运行任务)。
这里有更多关于如何编写与yarn集成的组件的信息。
正如我从两步Yarn应用程序编写中了解到的,一个人需要编写一个Yarn客户机和一个Yarn应用程序主控程序。
应用程序客户端确定作为应用程序主服务器运行的内容:
哪里
MyAppMaster
是特定于应用程序的主类。第二件事是在容器中运行的任务,请注意应用程序主机提供的运行容器的命令类型(它运行实际的任务执行器):
如您所见,这些是应用程序提供的代码,它们了解任务(或使用问题词汇的应用程序类型)。在同一页的下方,您可以看到如何将申请提交给yarn。
现在从spark的Angular 来看:spark有自己的应用程序主类(检查这里或整个包)。spark应用程序开发人员不知道这些,因为该框架提供了与yarn的内置集成,而yarn恰好是spark支持的资源管理器之一。
如果您要编写自己的yarn客户机来执行python代码,那么您必须遵循yarn应用程序客户机/主文档步骤中的步骤,以便为yarn提供用于执行应用程序特定逻辑或任务的命令、配置、资源和环境。