YARN 和 MapReduce 框架

YARN and MapReduce Framework

我了解了 YARN 框架的基础知识,但是对于 MapReduce,我仍然感觉缺乏一些了解。

使用 YARN,我了解到 MapReduce 只是可以 运行 在 YARN 之上的应用程序之一;例如,使用 YARN,在同一个集群上,各种不同的作业可以 运行、MapReduce 作业、Spark 作业等

现在,重点是,每种类型的作业都有其 "own" 种 "Job phases",例如,当我们谈论 MapReduce 时,它​​有多个阶段,例如 Mapper、Sorting、Shuffle , 减速机等

具体到这个场景,谁"decides","controls"这些阶段?它是 MapReduce 框架吗?

据我了解,YARN 是一个基础架构,不同的作业都在其上运行 运行;那么当我们提交一个MapReduce Job的时候,是不是先去MapReduce框架,然后代码由YARN去执行呢?我有这个疑问,因为 YARN 是通用执行引擎,所以它不会了解 mapper、reducer 等,这是 MapReduce 特有的(以及不同类型的作业),MapReduce Framework 运行 在 YARN 之上,在 YARN 的帮助下执行 Jobs,并且 MapReduce Framework 知道它必须为特定类型的 Job 经历哪些阶段?

对理解这一点的任何澄清都会有很大帮助。

所以当我们提交 MapReduce 作业时,它首先会转到资源管理器,它是 YARN 的主守护进程。资源管理器然后选择一个节点管理器(它们是 YARN 的从属进程)来启动一个容器,它将要求节点管理器在该容器上启动一个非常轻量级的进程,称为 Application Master。然后 Resource Manager 将要求 Application Master 开始执行作业。 Application Master 将首先检查作业的驱动程序部分,从那里它会了解将用于该作业的资源,因此它将向资源管理器请求这些资源。现在 Resource Manager 可以立即将资源分配给 Application Master,或者如果集群要被占用,那么该请求将根据各种调度算法重新调度。 获取资源后,Application Master 将转到名称节点以获取为此作业需要处理的所有块的元数据。 收到元数据后,Application Master 会询问存储块的节点的节点管理器(如果这些节点太忙,则在同一机架中的节点,否则任何随机节点取决于机架感知)并要求节点管理器启动容器以处理各自的块。 这些块将在各自的节点中独立并并行处理。整个处理完成后,结果将存储在 HDFS 中。

如果你看看这张来自Hadoop documentation的照片:

您会看到没有特定的 "job orchestration" 组件,而是一个资源请求组件,称为 application master。正如您提到的,YARN 进行资源管理,关于应用程序编排,它停留在抽象级别。

The per-application ApplicationMaster is, in effect, a framework specific library and is tasked with negotiating resources from the ResourceManager and working with the NodeManager(s) to execute and monitor the tasks.

应用于 Spark 时,该图中的某些组件将是:

  • 客户端:spark-submit进程
  • App Master:Spark 的 application master,运行 driver 和 application master(集群模式)或只是 application master(客户端模式)
  • 容器:火花工人

Spark 的 YARN 基础架构提供应用程序主机(以 YARN 术语),它了解 Spark 的架构。所以驱动程序运行时,无论是集群模式还是客户端模式,它仍然决定jobs/stages/tasks。这必须是 application/framework-specific(Spark 在 YARN 方面是 "framework")。

来自Spark documentation on YARN deployment

In cluster mode, the Spark driver runs inside an application master process which is managed by YARN on the cluster, and the client can go away after initiating the application. In client mode, the driver runs in the client process, and the application master is only used for requesting resources from YARN

根据您对该框架的理解,您可以将此抽象扩展到 map-reduce。