【总结】Hadoop中的Combiner实践

简介:

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


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 分钟






     本文转自巧克力黒 51CTO博客,原文链接:http://blog.51cto.com/10120275/1637950,如需转载请自行联系原作者



相关文章
|
5月前
|
分布式计算 Hadoop 数据处理
Hadoop数据倾斜使用Combiner
【7月更文挑战第5天】
34 3
|
存储 分布式计算 Hadoop
基于docker的Hadoop环境搭建与应用实践(脚本部署)
本文介绍了Hadoop环境的搭建与应用实践。对Hadoop的概念和原理进行了简要说明,包括HDFS分布式文件系统和MapReduce计算模型等,主要通过脚本的方式进行快捷部署,在部署完成后对HDFS和mapreduce进行了测试,确保其功能正常。
|
7月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
329 2
|
4月前
|
存储 分布式计算 Hadoop
【揭秘Hadoop背后的秘密!】HDFS读写流程大曝光:从理论到实践,带你深入了解Hadoop分布式文件系统!
【8月更文挑战第24天】Hadoop分布式文件系统(HDFS)是Hadoop生态系统的关键组件,专为大规模数据集提供高效率存储及访问。本文深入解析HDFS数据读写流程并附带示例代码。HDFS采用NameNode和DataNode架构,前者负责元数据管理,后者承担数据块存储任务。文章通过Java示例演示了如何利用Hadoop API实现数据的写入与读取,有助于理解HDFS的工作原理及其在大数据处理中的应用价值。
118 1
|
5月前
|
分布式计算 Hadoop
|
5月前
|
分布式计算 Hadoop
Hadoop配置作业使用Combiner
【7月更文挑战第7天】
47 4
|
5月前
|
分布式计算 Hadoop
|
5月前
|
分布式计算 Hadoop 测试技术
|
5月前
|
分布式计算 Hadoop Java
Hadoop编写Combiner类
【7月更文挑战第7天】
27 3
|
5月前
|
存储 分布式计算 Hadoop