Hadoop权威指南-ch2 MapReduce(1)
注:本文涉及书中2.1~2.3小结
1. MapReduce任务过程:map和reduce
MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段。每个阶段都以键值对作为输入和输出,其类型有程序员来选择。程序员还需要写两个函数:map函数和reduce函数。
本书以气象数据的例子讲述了MapReduce的工作原理。
2. Java MapReduce
实现MapReduce需要三个部分:map函数、reduce函数和一些用来运行作业的代码。
1. map函数由Mapper类实现,Mapper类声明一个map()虚方法。Mapper类是一个泛型类型,有4个形参类型,分别指定map函数的输入键、输入值、输出键、输出值的类型。
补充:
Mapper类是Hadoop提供的一个抽象类,我们可以继承这个基类并实现其中的相关接口函数.
Hadoop1.2.1中对Mapper类的定义如下:
public class Mapper<KEYIN, VALUEIN, KEYIN, VALUEIN>
Mapper类包含4个方法:setup(), map(), cleanup(), run()。其中,map方法是Mapper类的核心成员,主要工作都是在这里完成的,应用程序一般都会根据实际需要override该方法。
protected void map(KEYIN key, VALUEIN value, Context context)
其中key是传入map的键值,value是对应键值的value值,context是环境对象变量,供程序访问Hadoop的环境参数
map方法对输入的键值对进行处理,产生一系列的中间键值对,转换后的中间键值对可以有新的键值类型。
看完源码,感觉需要看看Java了T T
注:Hadoop本身提供了一套可优化网络序列化传输的基本类型,而不直接使用Java内嵌的类型,这些类型都在org.aache.hadoop.io包中。
2. 同理,reduce函数由Reducer类实现。Reducer类也有4个形参类型,用于指定输入键、输入值、输出键、输出值的类型。reduce函数的输入类型必须匹配map函数的输出类型。
3. 写运行MapReduce的作业代码。
注:
书中2.3小结给出了Hadoop在本地文件系统上的分析最高气温的实例,下一步准备对其进行复现。