YARN如何决定启动哪种类型的Application master?

时间:2018-03-30 09:00:37

标签: apache-spark hadoop mapreduce yarn hadoop2

我提到了this 链接,并对YARN如何运作有了公平的理解。 YARN能够运行多租户应用程序,例如MR,Spark等。

关键点是特定于应用程序的ApplicationMaster (AM)

当客户端将作业提交给资源管理器时,资源管理器如何知道它是什么类型的应用程序(MR,Spark)并因此启动适当的ApplicationMaster?

任何人都可以帮助RM了解提交给它的工作类型吗?

编辑:

这个问题是:RM如何知道提交了什么类型的工作,而不知道YARN或MR或Spark之间的任何关系。

RM收到一个Job,因此它必须启动第一个运行特定应用程序ApplicationMaster的Container,因此RM如何知道哪个Job已经提交给它?

这是我要问的问题,这与被复制的内容不同。

1 个答案:

答案 0 :(得分:3)

YARN不需要/想知道在其上运行的应用程序的类型。它提供资源,并且运行它的应用程序的关注点是理解如何从YARN获取资源以运行它需要运行的东西(YARN的架构并不表示 yarn想要知道运行什么/如何运行它)。

有关如何编写与纱线集成的组件的更多信息here

正如我从2步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";
    

如您所见,这些是应用程序提供的代码,它们了解任务(或使用问题单词的应用程序类型)。 Further down在同一页面上,您可以看到如何将应用程序提交给纱线。

现在把它放在Spark的角度来看:Spark有自己的应用程序主类(检查herethe entire package)。这些对Spark应用程序开发人员是隐藏的,因为该框架提供了与YARN的内置集成,YARN恰好只是Spark支持的资源管理器之一。

如果您要编写自己的YARN客户端来执行Python代码,那么您必须按照YARN应用程序客户端/主文档步骤中的步骤操作,以便为YARN提供命令,配置,资源,以及用于执行应用程序特定逻辑或任务的环境。