YARN中的MapReduce执行内部步骤

时间:2020-01-09 10:34:33  来源:igfitidea点击:

在这篇文章中,我们将看到当MapReduce作业提交给YARN时,Hadoop框架内部将执行作业的所有情况。

在YARN中运行MapReduce作业时,三个主要组件是

  • 客户端用于提交工作。
  • YARN守护程序用于管理资源并报告任务进度,这些守护程序是ResourceManager,NodeManager和ApplicationMaster。
  • 在YARN分配的容器上运行的MapReduce任务。

在YARN中运行MapReduce作业的步骤如下

  • 提交申请。这由Job和YARNClient处理。
  • ResourceManager通过其调度程序为提交的作业分配一个容器。
  • 特定于应用程序的ApplicationMaster,对于MapReduce应用程序是MRAppMaster,它开始在该容器上运行。
  • MRAppMaster根据Map and Reduce任务需求从ResourceManager协商容器。
  • 一旦由ResourceManager分配了容器,MRAppMaster将与分配容器的节点的NodeManagers通信以启动这些容器。 NodeManager还管理容器的资源。
  • MRAppMaster在那些容器中将Mapper / Reducer任务作为子进程执行。
  • 所有任务完成后,ApplicationMaster释放容器并关闭。

提交工作

Job是用户作业与ResourceManager交互的主要界面。

作业提交过程涉及:

  • 检查作业的输入和输出规格。这涉及检查输入和输出路径是否正确给出。
  • 计算作业的InputSplit值。
  • 如有必要,为作业的DistributedCache设置必要的记帐信息。
  • 将作业的jar和配置复制到FileSystem上的MapReduce系统目录。
  • 将作业提交到ResourceManager。这可以通过设置YarnClient对象来完成。如果我们运行MapReduce作业,则可以在控制台impl.YarnClientImpl上看到与此类似的行:提交的应用程序application_1520505776000_0002

提交作业可以使用以下两种方法中的任何一种

  • Job.submit():将作业提交到集群并立即返回。
  • Job.waitForCompletion(boolean):将作业提交到集群并等待其完成。

启动ApplicationMaster

YARN ResourceManager收到提交应用程序的请求后,将首先通过YARN调度程序为应用程序分配一个容器。 ResourceManager使用此容器来启动应用程序特定的ApplicationMaster。对于MapReduce应用程序,此ApplicationMaster是MRAppMaster。

ApplicationMaster的工作是与ResourceManager通信以获取更多资源并处理应用程序执行。

执行申请

ApplicationMaster检索YARNClient已计算的输入拆分。

在这里请注意,Hadoop MapReduce框架为由作业的InputFormat生成的每个InputSplit生成一个映射任务。减少任务的数量由mapreduce.job.reduces属性(在mapred-site.xml中)确定,该属性设置每个作业的缺省减少任务数量。

一旦ApplicatioMaster知道必须生成多少个map和reduce任务,它就会与ResourceManager协商以获取资源容器来运行这些任务。

用于确定映射和归约任务的内存和CPU需求的属性在mapred-site.xml中。

  • mapreduce.map.memory.mb为每个地图任务从调度程序请求的内存量。默认值为1024 MB。
  • mapreduce.map.cpu.vcores要从调度程序请求的每个地图任务的虚拟核心数。预设值为1.
  • mapreduce.reduce.memory.mb为每个化简任务从调度程序请求的内存量。默认值为1024 MB。
  • mapreduce.reduce.cpu.vcores要针对每个化简任务从调度程序请求的虚拟核心数。预设值为1.

ResourceManager将发送有关可以启动映射和归约任务的容器的信息。这些容器可以是群集上的任何节点,尽管对于Map Tasks,调度程序将尝试在输入拆分将其放置在本地的同一节点上获取容器。

ApplicationMaster(MRAppMaster)与分配的容器所在的节点的NodeManagers通信以启动这些容器。 MRAppMaster在启动的容器中执行Mapper / Reducer任务,作为单独jvm中的子进程。

任务更新

正在运行的map和reduce任务向ApplicationMaster提供有关任务进度和当前状态的信息。

提交作业的客户端还从ApplicationMaster接收当前状态。

ApplicationMaster还将定期将心跳发送到ResourceManager。

任务完成

提交作业的所有映射和缩小任务完成后,ApplicationMaster可以将作业的状态更改为"成功"。作业完成时,ApplicationMaster也存在。

YARN中的MapReduce作业流程