map函数中的更新计数器和reduce中的访问

e5nqia27  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(323)

我正在使用hadoop管道。我想在Map中使用计数器,它应该可以在reduce函数中访问。
有可能吗?

bogh5gae

bogh5gae1#

不,在同一份工作中这是不可能的。但是,您可以有一个没有缩减器的作业,收集任何要计算的计数器信息,然后启动第二个作业,在该作业中,您将这些计数值添加到作业配置对象中,然后第二个作业的缩减器可以访问这些值。
编辑:
下面是一个代码示例:

enum COUNTERS {C1; C2;}

class DriverCode
{
  Configuration conf = new Configuration();
  //the Mapper increases C1
  Job job1 = new Job(conf, "Job1"); 
  job1.setJarByClass(MyJar.class);
  job1.setMapperClass(MyMapper1.class); 
  ...

  //read out C1 
  long c1 = job.getCounters().findCounter(COUNTERS.C1).getValue();

  //set it for the new job
  conf.setLong("c1",c1);
  Job job2 = new Job(conf, "Job2"); 
  //and now you can access this configuration object in your second job
  job2.setJarByClass(MyJar.class); 
  job2.setMapperClass(MyMapper2.class);
  ...
}

相关问题