hadoop学习4

来源:互联网 发布:如何修改tomcat端口 编辑:程序博客网 时间:2024/06/06 00:47

利用mapreduce进行排序

import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;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.output.FileOutputFormat;public class Sort {    public static class Map extends Mapper<Object,Text,IntWritable,IntWritable>{        private static IntWritable data = new IntWritable();        @Override        protected void map(Object key, Text value, Mapper<Object, Text, IntWritable, IntWritable>.Context context)                throws IOException, InterruptedException {            String line = value.toString();            data.set(Integer.parseInt(line));            context.write(data, new IntWritable(1));        }    }    public static class Reduce extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable>{        private static IntWritable lineSum = new IntWritable(1);        @Override        protected void reduce(IntWritable key, Iterable<IntWritable> values,                Reducer<IntWritable, IntWritable, IntWritable, IntWritable>.Context context)                throws IOException, InterruptedException {            for(IntWritable value : values){                context.write(lineSum,key);                lineSum = new IntWritable(lineSum.get() + 1);            }        }    }    public static void main(String[] args) throws Exception{        Configuration conf = new Configuration();        Job job = new Job(conf,"sort");        job.setOutputKeyClass(IntWritable.class);        job.setOutputValueClass(IntWritable.class);        job.setMapperClass(Map.class);        job.setReducerClass(Reduce.class);        FileInputFormat.setInputPaths(job,new Path("hdfs://node1:9000/afan/input"));        FileOutputFormat.setOutputPath(job,new Path("hdfs://node1:9000/afan/output"));        boolean ret = job.waitForCompletion(true);        System.exit(ret? 0:1);    }}
原创粉丝点击