其中哪些用于提交作业以便在作业跟踪器中执行。如果可以解释这两个类如何在不同的用例中使用,那将是很好的。
答案 0 :(得分:0)
问题1:JobClient
作业控件是通过New API中的Job类而不是旧类完成的 的 JobClient 强>
Job
是工作提交者对工作的看法。
它允许用户配置作业,提交作业,控制其执行以及查询状态。 set方法仅在提交作业之前有效,之后它们将抛出IllegalStateException。
通常,用户创建应用程序,通过Job描述作业的各个方面,然后提交作业并监视其进度。
问题 2: JobSubmitter
submit()
上的Job
方法会创建一个内部JobSubmitter
实例并在其上调用submitJobInternal()
。
作业提交作业后,waitForCompletion()每秒轮询一次作业的进度,并将进度报告给控制台。成功完成job
后,将显示作业计数器。否则,导致作业失败的错误将记录到控制台。
JobSubmitter
实施的职位提交流程执行以下操作:
询问资源管理器是否有新的应用程序ID,用于MapReduce job ID
检查作业的输出规格。例如,如果尚未指定输出目录或输出目录已存在,则不会提交作业,并且会向MapReduce
程序抛出错误。
计算作业的input splits
。如果无法计算splits
(例如,因为输入路径不存在),则不会提交作业,并且会向MapReduce
程序抛出错误。
复制运行作业所需的资源,包括作业JAR文件 配置文件和计算的输入拆分到以作业ID命名的目录中的共享文件系统。
使用高复制因子(由mapreduce.client.submit.file.replication属性控制,默认为10)复制作业JAR,以便整个群集中有许多副本供节点管理器使用在他们为工作运行任务时进行访问。
通过调用资源管理器上的submitApplication()
Hadoop : The defiinitive guide foruth edition
是了解这些概念的最佳书籍之一
从代码端,您可以参考grepcode的源代码:
Job:要检查的API:waitForCompletion()
=> submit()
=> jobClient.submitJobInternal
JobClient:submitJobInternal