我了解YARN框架的基础知识,但是对于MapReduce,我仍然感到缺乏一些理解。
使用YARN,我已经读过MapReduce只是可以在YARN之上运行的应用程序之一;例如,使用YARN,在同一个集群上可以运行各种不同的作业,MapReduce作业,Spark作业等。
现在,重点是,每种类型的工作都有自己的"例如,当我们谈论MapReduce时,它有各种各样的阶段,如Mapper,Sorting,Shuffle,Reducer等。
具体到这个场景,谁决定","控制"这些阶段?是MapReduce框架吗?
据我所知,YARN是一个不同工作岗位的基础设施;所以当我们提交MapReduce Job时,它首先转到MapReduce框架然后代码由YARN执行吗?我有这个疑问,因为YARN是通用执行引擎,因此它不具备mapper,reducer等知识,这是MapReduce特有的(以及不同类型的Jobs),MapReduce Framework也是如此。 YARN的顶部,YARN帮助执行Jobs,MapReduce Framework知道它必须经历的特定类型的Job的阶段?
理解这一点的任何澄清都会有很大的帮助。
答案 0 :(得分:1)
如果你从Hadoop documentation看一下这张照片:
您将看到没有特定的“job orchestration”组件,而是一个名为application master的资源请求组件。正如您所提到的,YARN进行资源管理,并且在应用程序编排方面,它在抽象级别停止。
每个应用程序ApplicationMaster实际上是一个特定于框架的库,其任务是协调来自ResourceManager的资源并使用NodeManager 来执行和监视任务强>
当应用于Spark时,该图片中的一些组件将是:
Spark的YARN基础架构提供应用程序主机(以YARN表示),它了解Spark的架构。因此,当驱动程序运行时,无论是在群集模式还是在客户端模式下,它仍然会决定作业/阶段/任务。这必须是特定于应用程序/框架的(当涉及到YARN时,Spark是“框架”)。
来自Spark documentation on YARN deployment:
在群集模式下,Spark驱动程序在应用程序主进程内运行,该进程由群集上的YARN管理,客户端可以在启动应用程序后消失。在客户端模式下,驱动程序在客户端进程中运行,应用程序主服务器仅用于从YARN请求资源
根据您对该框架的理解,您可以将此抽象扩展为map-reduce。
答案 1 :(得分:0)
因此,当我们提交MapReduce作业时,它将首先转到资源管理器,它是YARN的主守护程序。然后,资源管理器选择一个节点管理器(它是YARN的从属进程)来启动一个容器,在该容器上它将要求节点管理器启动一个称为Application Master的非常轻量级的进程。然后资源管理器将要求Application Master开始执行该作业。 Application Master将首先完成作业的驱动程序部分,从而了解将用于作业的资源,因此它将向资源管理器请求这些资源。现在资源管理器可以立即将资源分配给应用程序主服务器,或者如果要占用集群,则将根据各种调度算法重新调度该请求。 获取资源后,Application Master将转到名称节点以获取此作业需要处理的所有块的元数据。 在收到元数据后,应用程序主机会向节点管理器询问存储块的节点(如果那些节点太忙,那么同一机架中的节点,否则任何随机节点取决于机架感知)并要求节点管理器发射用于处理各自块的容器。 这些块将在各自的节点中独立并行地进行处理。整个处理完成后,结果将存储在HDFS中。