Hadoop的MapReduce执行过程介绍.pdf

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hadoop的MapReduce执行过程介绍

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 和 reduce task @..Hadoop 有两类的节点控制 job 的运行:JobTracker 和 TaskTracker JobTracker 协调整个 job 的运行,将task分配到不同的TaskTracker 上 。TaskTracker 负责运行 task,并将结果返回给 JobTracker @..Hadoop 将输入数据分成固定大小的块,我们称之 input split @..Hadoop 为每一个 input split 创建一个 task,在此 task 中依次 处理此 split 中的一个个记录 (record) @..Hadoop 会尽量让输入数据块所在的 DataNode 和 task 所执行的 DataNode(每个 DataNode 上都有一个 TaskTracker)为同一个,可以 提高运行效率,所以 input split 的大小也一般是HDFS 的block 的 大小。 @..Reduce task 的输入一般为Map Task 的输出,Reduce Task 的输 出为整个 job 的输出,保存在HDFS 上。 @.. 在 reduce 中,相同 key 的所有的记录一定会到同一个 TaskTracker 上面运行,然而不同的 key 可以在不同的 TaskTracker 上面运行,我们称之为 partition (分区) Partitioner 用于划分键值空间(key

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档