我希望获得地图阶段的输入和输出数量以及使用Java完成map / reduce作业的reduce阶段和时间。这些统计信息写在终端上,但是我需要用Java代码来编写它并在我自己的界面上编写它,就在这行之后:
job_blocking.waitForCompletion(true);
答案 0 :(得分:0)
在此行之后,您可以通过获取这些计数器的值来获取MAP_INPUT_RECORDS和REDUCE_OUTPUT_RECORDS(也是MAP_OUTPUT_RECORDS)的数量:
long map_input_records = job.getCounters()
.findCounter("org.apache.hadoop.mapreduce.Task$Counter","MAP_INPUT_RECORDS")
.getValue();
long map_output_records = job.getCounters()
.findCounter("org.apache.hadoop.mapreduce.Task$Counter","MAP_OUTPUT_RECORDS")
.getValue();
long reduce_input_records = job.getCounters()
.findCounter("org.apache.hadoop.mapreduce.Task$Counter","REDUCE_INPUT_RECORDS")
.getValue();
long reduce_output_records = job.getCounters()
.findCounter("org.apache.hadoop.mapreduce.Task$Counter","REDUCE_OUTPUT_RECORDS")
.getValue();
对于运行作业所需的时间,我不知道是否有另一种方法(更容易),而不是在执行前后的当前时间设置一个长变量并获得它们的差异。