YARN中的MapReduce执行内部步骤
在这篇文章中,我们将看到当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作业流程