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

Roh*_*lvi 10 java apache hadoop mapreduce

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

保持RunningJob分开,是否有办法获得org.apache.hadoop.mapreduce.Jobmapred作业的对象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,因此作业本身为null.

有什么我错过的吗?

Roh*_*lvi 5

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