首页 > 其他 > 详细

Mapreduce编程

时间:2020-02-22 16:14:58      阅读:67      评论:0      收藏:0      [点我收藏+]

Map

public static class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable>

继承Mapper类
其中<LongWritable, Text, Text, IntWritable>的含义如下:

  • LongWritable为map函数的输入键,行首偏移量
  • Text为map函数的输入值,每行的内容
  • Text为输出类型,根据业务来定义
  • IntWritable为输出值,即reduce的输入值,根据业务来定义

继承后,编写map函数

public void map(LongWritable key, Text value,Context context)

Reduce

pubilc static class MyReduce extends Reducer<Text, IntWritable, Text, IntWritable>

继承Reducer类
其中<Text, IntWritable, Text, IntWritable>的含义如下:

  • Text 输入key
  • IntWritable reduce阶段输入值
  • Text reduce阶段输出类型
  • IntWritable 输出值

继承后,编写reduce函数
public void reduce(Text key, Iterable value, Context context)

main

主函数中要设置job

public static void main(String[] args) throws Exception {
        JobConf conf = new JobConf(WordCount.class);
        conf.setJobName("wordcount");

        conf.setOutputKeyClass(Text.class);
        conf.setOutputValueClass(IntWritable.class);

        conf.setMapperClass(Map.class);
        conf.setCombinerClass(Reduce.class);
        conf.setReducerClass(Reduce.class);

        conf.setInputFormat(TextInputFormat.class);
        conf.setOutputFormat(TextOutputFormat.class);

        FileInputFormat.setInputPaths(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));

        JobClient.runJob(conf);
    }
在main中要熟悉job和fs各项操作
  1. main函数调用jobconf来对MapReduce Job进行初始化,调用setJobName()命名Job
  2. 设置输出结果类型
conf.setOutputKeyClass(Text.class );

conf.setOutputValueClass(IntWritable.class );

Text相当于Java的String,IntWritable相当于Int

  1. 设置Map、Combiner、Reduce的相关处理类
  2. 调用setInputFormat()、setOutputFormat()设置输入输出路径

输入分片与记录

  • JobClient通过指定输入文件格式来生成数据分片InputSplit
  • 分片不是数据本身,而是数据的索引
  • InputFormat负责分片的生成

Mapreduce的输入文件格式以及多路径仍需要学习

Mapreduce编程

原文:https://www.cnblogs.com/chenshaowei/p/12345540.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!