您的位置:首页 > 大数据

大数据生态圈之MapReduce笔记

2019-07-29 20:24 204 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/lx529068450/article/details/97677200

Map

/**
mapper阶段业务逻辑实现的类
Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
*/

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
/*
KEYIN:表示mapper数据输入的时候key的数据类型,在默认的读取数据组件下,叫InputFormat,它的行为是一行一行的读取待处理的数据读取一行,返回一行给我们的mr程序,这种情况下  keyin就表示每一行的起始偏移量  因此数据类型是Long
VALUEIN:表述mapper数据输入的时候value的数据类型,在默认的读取数据组件下 valuein就表示读取的这一行内容  因此数据类型是String
KEYOUT 表示mapper数据输出的时候key的数据类型  在本案例当中 输出的key是单词  因此数据类型是String
VALUEOUT表示mapper数据输出的时候value的数据类型  在本案例当中 输出的key是单词的次数  因此数据类型是 Integer

这里所说的数据类型String Long都是jdk自带的类型   在序列化的时候  效率低下 因此hadoop自己封装一套数据类型
*   long---->LongWritable
*   String-->Text
*   Integer--->Intwritable
*   null-->NullWritable
*/
return null
}

Reduce

/**
reducer阶段处理的类
*/

public class WordCountReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
/*
KEYIN:就是reducer阶段输入的数据key类型,对应mapper的输出key类型  在本案例中  就是单词  Text
VALUEIN就是reducer阶段输入的数据value类型,对应mapper的输出value类型  在本案例中  就是单词次数  IntWritable
KEYOUT就是reducer阶段输出的数据key类型 在本案例中  就是单词  Text
VALUEOUTreducer阶段输出的数据value类型 在本案例中  就是单词的总次数  IntWritable
*/
return null
}

Driver

/**
* 这个类就是mr程序运行时候的主类,本类中组装了一些程序运行时候所需要的信息
* 比如:使用的是那个Mapper类  那个Reducer类  输入数据在那 输出数据在什么地方
*/
public class WordCountDriver {
public static void main(String[] args) throws Exception{
//通过Job来封装本次mr的相关信息
Configuration conf = new Configuration();
//        conf.set("mapreduce.framework.name","local");
Job job = Job.getInstance(conf);

//指定本次mr job jar包运行主类
job.setJarByClass(WordCountDriver.class);

//指定本次mr 所用的mapper reducer类分别是什么
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);

//指定本次mr mapper阶段的输出  k  v类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);

//指定本次mr 最终输出的 k v类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);

//指定本次mr 输入的数据路径 和最终输出结果存放在什么位置
FileInputFormat.setInputPaths(job,"D:\\wordcount\\input");
FileOutputFormat.setOutputPath(job,new Path("D:\\wordcount\\output"));

//        job.submit();
//提交程序  并且监控打印程序执行情况
boolean b = job.waitForCompletion(true);
System.exit(b?0:1);
}
}

完整代码 F:\IdeaProjects\example-mr

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: