美文网首页
Mapreduce基本程序

Mapreduce基本程序

作者: elrah | 来源:发表于2017-08-16 22:14 被阅读0次

    1.Mapper里面的map方法
    public void map(Object key,Text value,Context context) throws IOException,InterruptedException{...}

    map()方法里面有三个参数,Object key,Text value就是输入的key和value,第三个参数Context context可以记录输入的key和value,此外context还会记录map运算的状态。

    2.Reducer里面的reduce()方法
    pubilic void reduce(Text key,Iterable<IntWritable> values,Context context) throws IOException,InterruptedException{...}

    reduce()函数的输入也是一个key/value的形式,不过它的value是一个迭代器的形式Iterable<IntWritable> values,也就是说reduce中的values是一个key对应一组的值得value。
    3.main()函数
    public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    String[] otherArgs =
    new GenericOptionsParser(conf, args).getRemainingArgs();
    if (otherArgs.length != 2) {
    System.err.println("Usage: wordcount <in> <out>");
    System.exit(2);
    }
    Job job = new Job(conf, "word count");//构建一个job
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
    (1)Configuration conf=new Configuration();//初始化
    运行mapreduce程序前都要初始化Configuration,该类主要是读取mapreduce系统配置信息,这些信息包括hdfs还有mapreduce,也就是安装hadoop时候的配置文件例如:core-site.xml、hdfs-site.xml和mapred-site.xml等等文件里的信息。
    程序员开发mapreduce时候只是在填空,在map函数和reduce函数里编写实际进行的业务逻辑,其它的工作都是交给mapreduce框架自己操作的,但是至少我们要告诉它怎么操作啊,比如hdfs在哪里啊,mapreduce的jobstracker在哪里啊,而这些信息就在conf包下的配置文件里。
    (2) Job job = new Job(conf, "word count");
    在mapreduce框架里一个mapreduce任务也叫mapreduce作业也叫做一个mapreduce的job。
    具体的map和reduce运算就是task了,这里我们构建一个job,构建时候有两个参数,一个是conf,一个是这个job的名称。
    (3) job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    定义输出的key/value的类型,也就是最终存储在hdfs上结果文件的key/value的类型。
    (4)
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
    第一行就是构建输入的数据文件
    第二行是构建输出的数据文件
    最后一行是如果job运行成功了,程序就正常退出。
    FileInputFormat和FileOutputFormat可以设置输入输出文件路径,
    mapreduce计算时候:
    输入文件必须存在,不然mapreduce任务直接退出。
    输出一般是一个文件夹,而且该文件夹不能存在。

    相关文章

      网友评论

          本文标题:Mapreduce基本程序

          本文链接:https://www.haomeiwen.com/subject/duywrxtx.html