从群集中获取现有mapreduce作业(作业可以正在运行或已完成)

时间:2017-05-11 18:11:30

标签: java apache hadoop mapreduce

以前,我使用org.apache.hadoop.mapred.JobClient#getJob(org.apache.hadoop.mapred.JobID)来获取RunningJob。此调用是从作业完成回调方法进行的,但是,在我看来,存在一个计时问题,如果作业已经完成,那么上面的getJob()方法找不到它并返回null。我可以确认该作业是从集群UI完成的。

保持RunningJob分开,有没有办法在给定org.apache.hadoop.mapreduce.Job的情况下获取已映射作业的org.apache.hadoop.mapreduce.JobID对象,无论作业当前是在运行还是已完成?

我尝试编写类似的代码:

Cluster cluster = jobClient.getClusterHandle(); Job job = cluster.getJob(JobID.forName(jobId)); log.info("Trying to get actual job with id {} , found {} on cluster {}", JobID.forName(jobId), job, cluster);

我可以看到正确的jobId,也可以看到集群对象..但cluster.getJob()方法返回null,因此作业本身为空。

我有什么东西可以在这里错过吗?

2 个答案:

答案 0 :(得分:5)

问题在于最近的纱线升级需要在我的系统上启用MR历史记录服务器。这解决了这个问题。我最近从MR v1升级到v2,在该升级中,所有已完成的作业现在都已移至历史服务器。

答案 1 :(得分:0)

您正在寻找返回getAllJobStatuses()的<{1}}:

JobStatus[]