Map和Reduce两个处理阶段app
每一个阶段都以“键值对”做为输入和输出框架
Map函数提取年份和睦温信息,得到以下数据:函数
(1950,0)oop
(1950,22)spa
(1950,-11)对象
(1949,111)排序
(1949,78)input
map函数的输出经由MapReduce框架处理后,最后发送到reduce函数string
这个处理过程基于键来对键值对进行排序和分组it
reduce函数能够看到以下输入:
(1949, [111,78])
(1950, [0, 22, -11])
reduce函数,如今要作的是遍历整个列表,从中找出最大的读书:
(1949, 111)
(1950, 22)
这是最终输出结果:每年的全球最高气温记录。
MapReduce逻辑数据流:
一、input、cat *
二、map、map.rb
三、shuffle、sort
四、reduce、reduce.rb
五、output、output
示例
一个map函数
一个reduce函数
一些用来运行做业的代码
map函数,由Mapper类实现 来表示
Mapper类声明一个map()虚方法......
Mapper类,是一个泛型类型,有四个形参类型,分别指定map函数的输入键、输入值、输出键、输出值
输入键:一个长整数偏移量
输入值:一行文本
输出键:年份
输出值:气温(整数)
map()方法的输入,是一个键和一个值,首先将包含有一行输入的Text值转换成Java的String类型,而后使用substring()方法提取须要的列。
map()方法还提供Context实例用于输出内容的写入。将年份数据按Text对象读写(年份做为键),将气温值封装在IntWritable类型中。
只有气温数据不缺而且所对应质量代码显示为正确的气温读数时,这些数据才会被写入输出记录中。
一样,reduce函数也有四个形式参数类型用于指定输入和输出类型。
输入类型必须匹配map函数的输出类型,即:Text和IntWritable类型
所以,输出类型也必须是Text和IntWritable类型。
这个最高气温是经过循环比较每一个气温与当前所知最高气温所获得的。
Job对象指定做为执行规范,控制整个做业的运行。
构造Job对象以后,须要指定输入和输出数据的路径。
这个路径,能够是单个的文件、一个目录、或符合特定文件模式的一系列文件。
由函数名可知,能够屡次调用addInputPath()来实现多路径的输入。
setOutPath()指定输出路径,指定的是reduce函数输出文件的写入目录
在运行做业前,该目录是不该该存在的。不然Hadoop会报错并拒绝运行做业。(目的:放置数据丢失【被覆盖】)
2.4 横向扩展