网站建设资讯

NEWS

网站建设资讯

【总结】Hadoop中的Combiner实践

Combiner作用是合并Mapper的输出,Combiner的输出作为Reducer的输入,这样可以减少map任务和reducer任务之间的数据传输。

成都创新互联2013年至今,先为武安等服务建站,武安等地企业,进行企业商务咨询服务。为武安企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

1、在Job中设置Combiner和不设置Combiner,观察Reducer输入情况

使用如下代码设置Combiner

job.setCombinerClass(MaxTemperatureReducer.class);

@Override

public int run(String[] args) throws Exception {

Job job = new Job();

job.setJarByClass(MaxTemperature.class);

job.setJobName("Max temperature");

FileInputFormat.addInputPath(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

job.setMapperClass(MaxTemperatureMapper.class);

//job.setCombinerClass(MaxTemperatureReducer.class); 是否设置Combiner

job.setReducerClass(MaxTemperatureReducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

job.waitForCompletion(true);

//输出任务完成情况

System.out.println( "任务名称:" + job.getJobName() );

System.out.println( "任务成功:" + ( job.isSuccessful()?"是":"否" ) );

System.out.println( "输入行数:" + job.getCounters().findCounter("org.apache.hadoop.mapred.Task$Counter", "MAP_INPUT_RECORDS").getValue() );

System.out.println( "输出行数:" + job.getCounters().findCounter("org.apache.hadoop.mapred.Task$Counter", "MAP_OUTPUT_RECORDS").getValue() );

System.out.println( "输出行数:" + job.getCounters().findCounter("org.apache.hadoop.mapred.Task$Counter", "REDUCE_INPUT_RECORDS").getValue() );

return job.isSuccessful() ? 0 : 1;

}

2、以下是不设置Combiner的情况输出结果,Reducer输入行数与Mapper输出行数相等

任务名称:Max temperature

任务成功:是

MAP_INPUT_RECORDS输入行数:1207

MAP_OUTPUT_RECORDS行数:1190

REDUCE_INPUT_RECORDS行数:1190

任务开始:2015-04-24 14:26:00

任务结束:2015-04-24 14:26:03

任务耗时:0.04995 分钟

3、以下是设置Combiner的情况输出结果,经过Combiner后,Reducer输入行数大幅度减少。

任务名称:Max temperature

任务成功:是

MAP_INPUT_RECORDS输入行数:1207

MAP_OUTPUT_RECORDS行数:1190

REDUCE_INPUT_RECORDS行数:1

任务开始:2015-04-24 14:28:23

任务结束:2015-04-24 14:28:25

任务耗时:0.030966667 分钟


分享名称:【总结】Hadoop中的Combiner实践
网站URL:http://cdweb.net/article/ipdigs.html