packagetopN_01;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;importjava.io.IOException;importjava.util.Arrays;publicclassMyMapextendsMapper<LongWritable,Text,IntWritable,IntWritable>{int len;int[] top;@Overrideprotectedvoidsetup(Context context){//这个是从配置文件中,获得N的个数,如果没有设置这个变量,默认的是10
len = context.getConfiguration().getInt("N",10);
top =newint[len+1];}@Overrideprotectedvoidmap(LongWritable key,Text value,Context context)throwsIOException,InterruptedException{String[] arr = value.toString().split(",");if(arr.length ==4){int x =Integer.valueOf(arr[2]);add(x);}}protectedvoidadd(int val){//专门用来存放放进来的数据
top[0]= val;//排序,从小到大排序,top初始值都是0Arrays.sort(top);}@Overrideprotectedvoidcleanup(Context context)throwsIOException,InterruptedException{for(int i =1; i < len+1; i++){
context.write(newIntWritable(top[i]),newIntWritable(top[i]));}}}
Reduce类
packagetopN_01;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Reducer;importjava.io.IOException;importjava.util.Arrays;publicclassMyReduceextendsReducer<IntWritable,IntWritable,Text,Text>{int len;int[] top;@Overrideprotectedvoidsetup(Context context){//这个是从配置文件中,获得N的个数,如果没有设置这个变量,默认的是10
len = context.getConfiguration().getInt("N",10);
top =newint[len+1];}@Overrideprotectedvoidreduce(IntWritable key,Iterable<IntWritable> values,Context context){for(IntWritable val: values){add(val.get());}}protectedvoidadd(int val){
top[0]= val;Arrays.sort(top);}@Overrideprotectedvoidcleanup(Context context)throwsIOException,InterruptedException{for(int i = len; i >0; i--){//从最大值开始正序排序
context.write(newText(String.valueOf(len -i +1)),newText(String.valueOf(top[i])));}}}
Job类
packagetopN_01;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;importorg.apache.hadoop.io.Text;importjava.io.IOException;publicclassTestJob{publicstaticvoidmain(String[] args)throwsIOException,ClassNotFoundException,InterruptedException{Configuration conf =newConfiguration();//1 get a jobJob job =Job.getInstance(conf);//2 set jar main class
job.setJarByClass(TestJob.class);//3 set map class and reducer class
job.setMapperClass(MyMap.class);
job.setReducerClass(MyReduce.class);//4 set map reduce output type
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);//5 set key/value output file format and input/output pathFileInputFormat.setInputPaths(job,newPath("file:///simple/word.txt"));FileOutputFormat.setOutputPath(job,newPath("file:///simple/result"));//6 commit job
job.waitForCompletion(true);}}