MapReduce 可用于在 Job 对象上使用单独的方法调用: submit() (您也可以调用waitForCompletion() ,它会在没有有效提交的情况下呈现活动,此时将处于紧张状态让它完成)。
让我们了解一下组件——
- 客户端:提交 MapReduce 作业。
- Yarn 节点管理器:在集群中,它监视和启动机器上的计算容器。
- Yarn 资源管理器:处理集群上计算资源协调的分配。
- MapReduce 应用程序主:促进运行 MapReduce 工作的任务。
- 分布式文件系统:与其他实体共享作业文件。
如何提交作业?
要创建内部 JobSubmitter 实例,请使用submit()进一步调用其上的submitJobInternal() 。提交作业后,
waitForCompletion()每秒提交一次作业后轮询作业的进度。如果报告自上次报告以来发生了变化,它会进一步向控制台报告进度。作业成功完成时会显示作业计数器。否则错误(导致作业失败)将记录到控制台。
JobSubmitter为提交 Job 实现的流程:
- 资源管理器要求用于 MapReduce 作业 ID 的新应用程序 ID。
- 检查作业的输出规格。例如,错误被抛出到 MapReduce 程序或作业未提交或输出目录已存在或尚未指定。
- 如果无法计算拆分,它会计算作业的输入拆分。这可能是由于作业未提交且向 MapReduce 程序抛出错误。
- 运行作业所需的资源被复制——它包括作业 JAR 文件、计算的输入拆分,到以作业 ID 和配置文件命名的目录中的共享文件系统。
- 它复制具有高复制因子的作业 JAR ,该因子由 mapreduce.client.submit.file.replication 属性控制。因为节点管理器可以访问集群中的副本数量。
- 通过调用submitApplication() ,在资源管理器上提交作业。