从提交的 mapreduce 作业中获取 yarn applicationId

Get yarn applicationId from a submitted mapreduce job

我需要能够从 mapreduce 作业中获取 yarn applicationId。我找不到任何 API 来做到这一点。我的 mapreduce 作业示例:

Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.submit();
job.waitForCompletion(true);

是否有类似于job.getJobId的API来检索yarn applicationId?我知道 yarn application -list 命令,但我需要能够通过某种 API 知道程序中的 applicationId。看起来 jobId 与前缀的 applicationId execpt 相同('job' vs 'application'),我可以解析,但我希望我可以使用 API 中的一些东西。

我最终解析了 jobId,删除了 'job' 前缀并添加了 'application' 前缀,因为 applicationId 似乎没有为 mapreduce 作业公开,它与 jobId 的 ID 基本相同,但前缀不同。这是一种 hacky 方法,但目前有效。

你也可以试试这个:

job.getJobID().appendTo(new StringBuilder("application"))

如果您看到 JobID class,他们会将 "JOB" 作为参数传递,在这种情况下可以由应用程序替换。

这将给出应用程序 ID。