yarn如何决定要启动哪种类型的应用程序主机?

ocebsuys  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(290)

我参考了这个链接,对Yarn的工作原理有了相当的了解。yarn能够运行多租户应用程序,例如mr、spark等。
关键是应用程序特定 ApplicationMaster (AM) .
当客户机向资源管理器提交作业时,资源管理器如何知道它是什么类型的应用程序(mr、spark),从而启动相应的applicationmaster?
有人能帮助rm了解提交给它的是哪种工作吗?

编辑:

这个问题是:rm如何知道提交了什么样的作业,而不是Yarn、mr或spark之间的任何关系。
rm收到一个作业,因此它必须启动第一个运行特定于应用程序的applicationmaster的容器,因此rm如何知道提交给它的是哪种作业?
这是我要问的问题,这和它被复制的东西不一样。

t9eec4r0

t9eec4r01#

Yarn不需要/不想知道在其上运行的应用程序的类型。它提供资源,运行在它上面的应用程序关心的是如何从yarn获取资源,以便运行它需要运行的东西(yarn的体系结构并不表明yarn想知道在它上面运行什么/如何运行任务)。
这里有更多关于如何编写与yarn集成的组件的信息。
正如我从两步Yarn应用程序编写中了解到的,一个人需要编写一个Yarn客户机和一个Yarn应用程序主控程序。
应用程序客户端确定作为应用程序主服务器运行的内容:

// Construct the command to be executed on the launched container 
String command = 
    "${JAVA_HOME}" + /bin/java" +
    " MyAppMaster" + 
    " arg1 arg2 arg3" +
    ...

哪里 MyAppMaster 是特定于应用程序的主类。
第二件事是在容器中运行的任务,请注意应用程序主机提供的运行容器的命令类型(它运行实际的任务执行器):

// Set the necessary command to execute on the allocated container 
String command = "/bin/sh ./MyExecShell.sh";

如您所见,这些是应用程序提供的代码,它们了解任务(或使用问题词汇的应用程序类型)。在同一页的下方,您可以看到如何将申请提交给yarn。
现在从spark的Angular 来看:spark有自己的应用程序主类(检查这里或整个包)。spark应用程序开发人员不知道这些,因为该框架提供了与yarn的内置集成,而yarn恰好是spark支持的资源管理器之一。
如果您要编写自己的yarn客户机来执行python代码,那么您必须遵循yarn应用程序客户机/主文档步骤中的步骤,以便为yarn提供用于执行应用程序特定逻辑或任务的命令、配置、资源和环境。

相关问题