数据岗位面试题更新 2026-08-05

请解释 MapReduce 作业提交机制的内部设计,描述从客户端提交作业到作业被调度执行的整体流程。

数据系统设计技术原理

考察说明

考查对 MapReduce 作业从提交到执行的完整流程和内部组件协作机制的理解。

回答思路

  1. 【回答框架 1】作业提交机制的核心是客户端与集群资源管理器的交互流程,典型流程包括:客户端向 ResourceManager 提交作业,ResourceManager 与 NameNode 交互获取作业的 HDFS 文件元信息,并生成 ApplicationId。随后客户端将作业所需的资源(如 jar 包、配置、分片信息)上传到 HDFS。
  2. 【回答框架 2】ResourceManager 收到提交请求后,会为作业分配一个 ApplicationMaster(AM),AM 再向 ResourceManager 申请容器用于执行 Map 和 Reduce 任务。AM 负责作业的初始化、任务调度、进度监控和容错。
  3. 【回答框架 3】具体提交流程通常为:客户端调用 Job.waitForCompletion 等方法,内部通过 JobSubmitter 提交作业,包括检查作业参数、计算输入分片、上传资源、调用 submitJob 提交作业。
  4. 【回答框架 4】提交后,ResourceManager 将作业放入调度队列,并为 AM 创建容器。AM 启动后,从 HDFS 获取作业资源,解析分片,为每个分片创建 Map 任务,根据 shuffle 阶段准备 Reduce 任务,并在合适的节点上运行任务。
  5. 【关键点 1】作业提交的核心组件包括客户端、ResourceManager、NameNode、ApplicationMaster 和 HDFS。
  6. 【关键点 2】输入分片(InputSplit)的计算发生在客户端提交阶段,每个分片对应一个 Map 任务。
  7. 【关键点 3】作业资源(jar、配置、分片信息)在提交时上传到 HDFS,供 AM 和任务使用。
  8. 【关键点 4】AM 是作业的执行管理者,负责任务调度、进度监控和失败重启。
  9. 【易错点 1】不要将提交机制与任务执行阶段混淆,提交阶段仅负责资源准备和作业初始化。
  10. 【易错点 2】注意区分传统 MapReduce(基于 JobTracker/TaskTracker)与 YARN 架构(ResourceManager/NodeManager),现在的提交流程基于 YARN。
  11. 【易错点 3】避免忽略提交前的输入分片计算和作业参数校验环节。