按我们上传一个文件,统计该文件里面的所有单词个数为例进行讲解
一、编程规范:
二、Mapper阶段业务逻辑实现
MyMapper类继承的Mapper方法的四个参数的类型解析:
1、KEYIN:表示数据输入的时候key数据类型,在默认的读取数据组件下,叫InputFormat,它的行为是一行一行读取待处理的数据,读取一行,返回一行给我们的mr程序,在这种情况下,keyin就表示一行的起始偏移量 因始数据的类型是long
2、VALUEIN:表述数据输入的时候value的数据类型,在默认的读取数据组件下 valuein就表示读取的这一行内容 因始读取的数据类型是String
3、KEYOUT:表示mapper数据输出的时候key的数据类型,在本案例当中,输出的key是单词,因始类型是String
4、VALUEOUT表示mapper 数据输出的时候value的数据类型 在本案例当中,输出的key是单词的次数,因此数据类型是Integer
public class MyMapper extends Mapper<keyin, valuein, keyout, valueout>
这里所说的数据类型long、String都是jdk自带的类型,在序列化的时候,效率低下,因此hadoop自己封装一套数据类型,如下:
long---->LongWritable
String---->Text
Integer---->Intwritable
null-->NullWritable
//上面已经解析为啥使用LongWritable、Text、IntWritable
public class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
//这里就是mapreduce程序,mapper阶段业务逻辑实现方法,该方法的调用取决于读取数据的组件有没有给Mr传入数据,如果有,每传入一个《k,v》对 该方法就调用一次
//这里LongWritable key 表示传入的keyin 类型是LongWritable
//Text value 表示传入的valuein 类型是Text
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//拿到传入进来的一行内容,把数据类型转化为String
String line=value.