### Hadoop Job 提交流程详解 #### Hadoop 1.x 版本的 Job 提交流程 在 Hadoop 1.x 版本中,Job 的提交流程主要包括以下几个关键步骤: 1. **启动 JobClient 实例**:MapReduce 程序通过 `runJob()` 方法启动一个 `JobClient` 实例。 2. **获取 Job ID**:`JobClient` 通过调用 `getNewJobId()` 接口向 `JobTracker` 发送提交作业请求,`JobTracker` 返回一个唯一的作业 ID (`jobID`) 和该作业的存放目录。`jobID` 的格式通常为 `job_YYYYMMDDHHmmSS_nnnn`,其中 `YYYYMMDDHHmmSS` 表示 `JobTracker` 启动的时间戳,`nnnn` 表示作业序号。 3. **数据切片**:`JobClient` 对输入数据源进行切片处理,生成 `job.splits` 资源文件。每个切片文件会对应一个 Map 任务。 4. **资源文件上传**:`JobClient` 将作业执行所需的资源文件(如 JAR 文件、配置文件和 `job.splits` 文件)上传至 HDFS 的指定位置(通常是 `JobTracker` 的工作目录加上 `jobID`)。 5. **提交作业**:`JobClient` 通过 RPC 机制将作业的基本信息(如 `jobID` 和 HDFS 文件目录)发送给 `JobTracker`。 6. **作业排队**:`JobTracker` 将接收到的作业信息放入作业队列等待执行。一旦有可用资源,`JobTracker` 会从队列中取出作业进行初始化。 7. **任务分配**:`JobTracker` 访问 HDFS 上的 `job.split` 文件,并根据其中的信息进行任务分配。同时,`TaskTracker` 通过心跳机制从 `JobTracker` 获取任务。 8. **任务执行**:`TaskTracker` 从 HDFS 获取作业所需的资源文件(如 JAR 包和参数),并启动 Java 的 JVM 子进程来执行 Map 任务或 Reduce 任务。一个 `TaskTracker` 可以启动多个 Java 进程来执行多个 Map 或 Reduce 任务。 9. **监控与重试**:`JobTracker` 监控任务执行情况,若发现失败的任务,则会重新执行。 #### Hadoop 2.x 版本的 Job 提交流程 Hadoop 2.x 引入了 YARN (Yet Another Resource Negotiator) 架构,使得 Job 提交流程发生了较大的变化: 1. **获取 Job ID**:客户端通过 `YarnRunner` 类调用 `getNewJobId()` 方法向 `ResourceManager` 发送提交作业请求。`ResourceManager` 检查作业输出路径是否已存在,不存在则初始化存放 Job 相关资源的路径,并返回作业 ID 和作业资源的存放路径。 2. **资源文件上传**:客户端以返回的路径和作业 ID 作为目录,将作业相关的 JAR 包(包括第三方库和 `job.jar`)、参数文件和 `job.split` 文件上传至 HDFS。上传后,这些数据会被 DistributedCache 缓存。 3. **提交作业**:客户端向 `ResourceManager` 提交作业,提交的信息包括 `jobID` 和 HDFS 文件目录等基本信息。`ResourceManager` 不直接接收计算数据和资源数据,因为客户端和 `ResourceManager` 都可以通过 HDFS 访问这些数据。 4. **调度与任务分配**:`ResourceManager` 将作业放入调度器,并寻找空闲的 `NodeManager` 来创建一个 `Container` 容器,并在其中启动 `MRAppMaster`。`MRAppMaster` 根据 `job.split` 文件为每个输入切片创建 Map 任务,并根据配置创建 Reduce 任务。 5. **资源加载与任务执行**:`MRAppMaster` 加载客户端提交到 HDFS 的资源文件(如 `job.split`、`job.xml` 和 JAR 包),并在 `Container` 内执行 Map 和 Reduce 任务。 6. **任务监控**:`MRAppMaster` 监控任务执行过程,并在必要时重新执行失败的任务。 无论是 Hadoop 1.x 还是 2.x 版本,Job 的提交流程都包括了从客户端提交作业、资源文件的上传与管理、作业的调度与执行等多个环节。不同版本之间的主要区别在于 2.x 版本引入了 YARN 架构,从而实现了资源管理和计算任务的分离,提高了系统的灵活性和可扩展性。
剩余18页未读,继续阅读
- 粉丝: 0
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助