了解了MapReduce在Java中实现的整体架构之后,我们先来看一个MapReduce最开始启动的组件:Mapper。
原理
详细的原理介绍已经在系列的另一篇文章《5分钟掌握大数据:MapReduce》里面说过了,下面我们简单介绍一下:
Map的任务是处理原始数据、为数据打标签、对数据进行分发。
详细点说,就是对输入的原始数据进行一定的处理,比如筛选过滤选出所需要的数据集;然后对这部分数据按照业务的逻辑进行打标签(key),等待被分发给对应的Reduce进行处理。
业务逻辑是指:如果你要统计一天的销售额,那就按天分配;如果你要统计一个省份的人口,那就按照省份分配。
代码详解
在进行具体的业务代码编写之前,让我们先看一下Java中对于Map的实现。
我们先来精简一下最简单的逻辑,来看看java中如何定义的Mapper
java中Mapper精简定义1 传入的四个参数:输入输出类型说明,详情见另一篇文章。
2 内部实现:
声明了类Context,传递了四个泛型,分别是输入的key类型、输入的value类型、输出的key类型、输出的value类型。
定义了四个方法:
setup:定义Map的启动工作,比如读入一些配置、进行一些变量的初始化等
map:定义实际的mapper阶段功能,比如数据读入、处理、打标签、分发等
cleanup:定义mapper阶段之后收尾工作,比如多路输出等。
run:实际执行程序的方法,先调用setup完成启动工作,然后调用map完成实际的mapper阶段功能,在所有map工作都完成之后,调用cleanup完成收尾工作。
如何写Mapper
最小实现
MiniTest.java
java中map的最小实现接下来我们一行一行的来看:
java中map的最小实现的注释版了解了最小实现之后,我们来看一个最经典的例子:WordCountMapper.java
WordCount在java中的map实现补充:官方完整定义
Mapper官方定义
文集链接
文章链接
网友评论