为了分析MapReduce实际过程,不重写map和reduce方法,查看Reducer输出结果,分析和学习相关类;
开发环境Eclipse,Ubuntu 10.04,Hadoop 1.1.2完全分布模式,其中hadoop 1.1.2的Eclipse插件可以在我的资源中下载;
输入文件为一个.txt文件。
package org.cqut.hadoop;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;
import org.apache.hadoop.util.GenericOptionsParser;
/**
*
* 测试不重写Map和Reduce方法得到的结果;
*
* */
public class OtherLazyMapReduce {
public static void main(String args[]) throws IOException,
InterruptedException, ClassNotFoundException {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Erro ! System Will Exit");
System.exit(2);
}
Job job = new Job(conf, "OtherLazyMapReduce");// 1.利用配置文件初始化一个Job,并且命名一个由MapReduce框架处理的Job;
/***********InputFormat类************/
/*
* InputFormat类;
*
* 作用:
* 1.设置输入的形式;
* 2.将输入的数据按照相应的形式分割成一个个spilts后再进一步拆分成<key,value>对作为Mapper的输入;
* 3.默认使用TextInputFormat类进行处理;
* 4.可以通过job.setInputFormatClass()方法进行设置;
*
* */
job.setInputFormatClass(TextInputFormat.class);
/*****Mapper类**********/
/*
* Mapper类
*
* 作用:
* 1.接受MapReduce框架处理后的<key,value>对;
* 2.并且通过实现map()方法,转化为中间结果的<key,value>对;
* 3.可以通过job.setMapperClass()进行设置;
*
**/
job.setMapperClass(Mapper.class);// 设置默认的Mapper类接受InputFormatClass类分解的键值对;
/*****MapOutputKey/valueClass****/
/*
*设置中间输出的key和value的类型;
* */
job.setMapOutputKeyClass(LongWritable.class);
job.setMapOutputValueClass(Text.class);
/*******Combiner类*****/
/*
* 作用:
* 1.实现combine()方法,合并中间结果中具有相同key值的键值对;
* 2.可以通过job.setCombinerClass()进行设置;
*
* */
job.setCombinerClass(Reducer.class);// 合并中间结果具有相同key值的键值对传人指定的Reducer;
/******Partitioner类**************/
/*
* Partitioner类
*
* 作用:
* 1.用于在Shuffle过程中按照key值将中间数据分解成R份,每一份由一个Reducer负责处理;
* 2.默认采用哈希函数完成Shuffle过程;
* 3.可以通过job.setPartitionerClass()设置;
*
*/
job.setPartitionerClass(HashPartitioner.class);
/*************Reducer类**********/
/*
* Reducer类
*
* 作用:
* 1.实现reduce()方法
* 2.将中间结果合并,得到最终结果;
* 3.可以通过job.setReducerClass()设置;
*/
job.setReducerClass(Reducer.class);
/***********Outputkey/valueClass类******/
/*
* OutputFormat类
*
* 作用:设置Reducer过程输出最终结果键值对的类型;
*/
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
/********OutputFormatClass类****************/
/*
* 作用:设置输出的结果的形式;
*
* */
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
开发环境Eclipse,Ubuntu 10.04,Hadoop 1.1.2完全分布模式,其中hadoop 1.1.2的Eclipse插件可以在我的资源中下载;
输入文件为一个.txt文件。
package org.cqut.hadoop;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;
import org.apache.hadoop.util.GenericOptionsParser;
/**
*
* 测试不重写Map和Reduce方法得到的结果;
*
* */
public class OtherLazyMapReduce {
public static void main(String args[]) throws IOException,
InterruptedException, ClassNotFoundException {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Erro ! System Will Exit");
System.exit(2);
}
Job job = new Job(conf, "OtherLazyMapReduce");// 1.利用配置文件初始化一个Job,并且命名一个由MapReduce框架处理的Job;
/***********InputFormat类************/
/*
* InputFormat类;
*
* 作用:
* 1.设置输入的形式;
* 2.将输入的数据按照相应的形式分割成一个个spilts后再进一步拆分成<key,value>对作为Mapper的输入;
* 3.默认使用TextInputFormat类进行处理;
* 4.可以通过job.setInputFormatClass()方法进行设置;
*
* */
job.setInputFormatClass(TextInputFormat.class);
/*****Mapper类**********/
/*
* Mapper类
*
* 作用:
* 1.接受MapReduce框架处理后的<key,value>对;
* 2.并且通过实现map()方法,转化为中间结果的<key,value>对;
* 3.可以通过job.setMapperClass()进行设置;
*
**/
job.setMapperClass(Mapper.class);// 设置默认的Mapper类接受InputFormatClass类分解的键值对;
/*****MapOutputKey/valueClass****/
/*
*设置中间输出的key和value的类型;
* */
job.setMapOutputKeyClass(LongWritable.class);
job.setMapOutputValueClass(Text.class);
/*******Combiner类*****/
/*
* 作用:
* 1.实现combine()方法,合并中间结果中具有相同key值的键值对;
* 2.可以通过job.setCombinerClass()进行设置;
*
* */
job.setCombinerClass(Reducer.class);// 合并中间结果具有相同key值的键值对传人指定的Reducer;
/******Partitioner类**************/
/*
* Partitioner类
*
* 作用:
* 1.用于在Shuffle过程中按照key值将中间数据分解成R份,每一份由一个Reducer负责处理;
* 2.默认采用哈希函数完成Shuffle过程;
* 3.可以通过job.setPartitionerClass()设置;
*
*/
job.setPartitionerClass(HashPartitioner.class);
/*************Reducer类**********/
/*
* Reducer类
*
* 作用:
* 1.实现reduce()方法
* 2.将中间结果合并,得到最终结果;
* 3.可以通过job.setReducerClass()设置;
*/
job.setReducerClass(Reducer.class);
/***********Outputkey/valueClass类******/
/*
* OutputFormat类
*
* 作用:设置Reducer过程输出最终结果键值对的类型;
*/
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
/********OutputFormatClass类****************/
/*
* 作用:设置输出的结果的形式;
*
* */
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}