- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1、Map-Reduce 的逻辑过程
假设我们需要处理一批有关天气的数据,其格式如下:
?按照 ASCII 码存储,每行一条记录
?每一行字符从 0 开始计数,第 15 个到第 18 个字符为年
?第 25 个到第 29 个字符为温度,其中第 25 位是符号 +/-
我们现在需要统计出每年的最高温度。
Map-Reduce主要包括两个步骤: Map和 Reduce
每一步都有 key-value 对作为输入和输出:
?map 阶段的 key-value 对的格式是由输入的格式所决定的,如果是
默认的 TextInputFormat ,则每行作为一个记录进程处理,其中 key
为此行的开头相对于文件的起始位置, value 就是此行的字符文本
?map 阶段的输出的 key-value 对的格式必须同 reduce 阶段的输入
key-value 对的格式相对应
对于上面的例子,在 map过程,输入的 key-value 对如下:
在 map 过程中,通过对每一行字符串的解析,得到年 - 温度的
key-value 对作为输出:
在 reduce 过程,将 map过程中的输出,按照相同的 key 将 value 放
到同一个列表中作为 reduce 的输入
在 reduce 过程中,在列表中选择出最大的温度,将年 - 最大温度的
key-value 作为输出:
其逻辑过程可用如下图表示:
2、编写 Map-Reduce 程序
编写 Map-Reduce程序,一般需要实现两个函数: mapper 中的 map函
数和 reducer 中的 reduce 函数。
一般遵循以下格式:
注: Reporter :
Reporter 是用于 Map/Reduce应用程序报告进度(心跳) ,设定应用
级别的状态消息, 更新 Counters (计数器)的机制。
OutputCollector :
OutputCollector 是一个 Map/Reduce 框架提供的用于收集 Mapper
或 Reducer 输出数据的通用机制 (包括中间输出结果和作业的输出
结果)。
对于上面的例子,则实现的 mapper如下:
实现的 reducer 如下:
注:代码中 LongWritable, IntWritable, Text 均是 Hadoop 中实
现的用于封装 Java 数据类型的类,这些类都能够被串行化从而便于
在分布式环境中进行数据交换,你可以将它们分别视为 long, int,
String 的替代品
欲运行上面实现的 Mapper 和 Reduce,则需要生成一个 Map-Reduce
得任务 (Job) ,即初始化 Job 的过程,其基本包括以下三部分:
?输入的数据,也即需要处理的数据
?Map-Reduce程序,也即上面实现的 Mapper和 Reducer
?此任务的配置项 JobConf
欲配置 JobConf ,需要大致了解 Hadoop运行 job 的基本原理:
@..Hadoop 将 Job 分成 task 进行处理,共两种 task :map task 和
r
文档评论(0)