Я пытаюсь получить количество строк входных записей в маппере, запустив
job.getCounters().findCounter(TaskCounter.MAP_INPUT_RECORDS).getValue()
На самом деле, он работает после того, как работа завершена, и я хочу сделать то же самое на этапе настройки редуктора. Я попытался переписать 2 функции настройки в соответствии с этой страницей Доступ к счетчику картографа из редуктора . Однако ни один из них не работает, и оба возвращают исключение нулевого указателя.
@Override
protected void setup(Reducer<Text, DoubleWritable, Text, DoubleWritable>.Context context)
throws IOException, InterruptedException {
Configuration conf = context.getConfiguration();
Cluster cluster = new Cluster(conf);
//RunningJob job = (RunningJob) cluster.getJob(context.getJobID());
Job job = cluster.getJob(context.getJobID());
System.out.println(job.getCounters().findCounter(TaskCounter.MAP_INPUT_RECORDS).getValue());
}
@Override
protected void setup(Reducer<Text, DoubleWritable, Text, DoubleWritable>.Context context)
throws IOException, InterruptedException {
Configuration conf = context.getConfiguration();
JobClient client = new JobClient(conf);
RunningJob job = client.getJob(JobID.forName(conf.get("mapred.map.id")));
//Job job = (Job) client.getJob((JobID) context.getJobID());
System.out.println(job.getCounters().findCounter(TaskCounter.MAP_INPUT_RECORDS).getValue());
}
Может кто-нибудь помочь мне решить проблему? Большое спасибо.