我想得到map阶段和reduce阶段的输入和输出的数量,以及用java完成map/reduce作业的时间。这些统计数据是写在终端上的,但我需要用java代码来获取它,并在我自己的接口上编写,就在这行之后:
job_blocking.waitForCompletion(true);
lnxxn5zx1#
在这一行之后,您可以通过获取这些计数器的值来获取map\u input\u记录的数量并减少\u output\u记录(也称为map\u output\u记录):
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();
对于运行作业所需的时间,我不知道是否有其他方法(更简单)比使用当前时间设置一个长变量(在执行之前和之后)并获取它们的差异更方便。
1条答案
按热度按时间lnxxn5zx1#
在这一行之后,您可以通过获取这些计数器的值来获取map\u input\u记录的数量并减少\u output\u记录(也称为map\u output\u记录):
对于运行作业所需的时间,我不知道是否有其他方法(更简单)比使用当前时间设置一个长变量(在执行之前和之后)并获取它们的差异更方便。