0

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

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

现在,重点是,每种类型的作业都有其“自己”的“作业阶段”,例如,当我们谈论 MapReduce 时,它​​有各种阶段,如 Mapper、Sorting、Shuffle、Reducer 等。

具体到这个场景,谁“决定”、“控制”这些阶段?是 MapReduce 框架吗?

据我了解,YARN 是运行不同作业的基础设施;那么当我们提交一个 MapReduce Job 的时候,是不是先进入 MapReduce 框架,然后再由 YARN 执行代码呢?我有这个疑问,因为 YARN 是通用执行引擎,所以它不会了解 MapReduce(以及不同类型的作业)特有的映射器、reducer 等知识,所以 MapReduce 框架运行在YARN,在 YARN 帮助下执行作业,MapReduce 框架是否知道它必须为特定类型的作业经历的阶段?

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

4

2 回答 2

1

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

于 2018-03-30T05:24:39.207 回答
1

如果您查看Hadoop 文档中的这张图片:

纱线架构

您会看到没有特定的“作业编排”组件,而是一个资源请求组件,称为应用程序主控。正如您所提到的,YARN 进行资源管理,并且关于应用程序编排,它停留在抽象级别。

每个应用程序的 ApplicationMaster 实际上是一个特定于框架的库,其任务是从 ResourceManager 协商资源并与 NodeManager(s)一起执行和监视任务

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

  • 客户:火花提交过程
  • App Master:运行驱动程序和应用程序主机(集群模式)或只是应用程序主机(客户端模式)的 Spark 应用程序主机
  • 容器:火花工人

Spark 的 YARN 基础设施提供了应用程序主控(以 YARN 术语),它了解 Spark 的架构。因此,当驱动程序在集群模式或客户端模式下运行时,它仍然决定作业/阶段/任务。这必须是特定于应用程序/框架的(当涉及到 YARN 时,Spark 是“框架”)。

来自关于 YARN 部署的 Spark 文档

在集群模式下,Spark驱动运行在集群上由YARN管理的应用主进程中,客户端启动应用后即可离开。在客户端模式下,驱动程序运行在客户端进程中,应用程序主控仅用于向 YARN 请求资源

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

于 2018-03-30T05:27:00.123 回答