MapReduce基本使用
基础知识
MapReduce 框架只对 <key, value>
形式的键值对进行处理。MapReduce会将任务的输入当成一组 <key, value>
键值对,最后也会生成一组 <key, value>
键值对作为结果。常见的输入为文件,此时读取的行偏移量会作为Key,文件内容作为Value。
key 和 value 的类必须由框架来完成序列化,所以需要实现其中的可写接口(Writable)。如果需要进行数据排序,还必须实现 WritableComparable 接口。MapReduce已经提供了基本数据类型的Writable实现类,自定义类需要自行实现接口。
常见的基本数据类型的Writable有IntWritable、LongWritable、Text等等。
MapReduce任务由Map和Reduce两个过程,所以需要分别进行编写。Map的实现需要继承Mapper类,实现map方法完成数据处理;Reduce则要继承Reduer类,实现reduce方法完成数据聚合。
/*
* KEYIN:输入kv数据对中key的数据类型
* VALUEIN:输入kv数据对中value的数据类型
* KEYOUT:输出kv数据对中key的数据类型
* VALUEOUT:输出kv数据对中value的数据类型
* 数据类型为Writable类型
*/
public static class MyMapper extends Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>{
// Context为MapReduce上下文,在Map中通常用于将数