MapReduce

MapReduce是 一种 用于数据处理的 编程模型。该模型 非常简单。

同一个程序Hadoop 可以 运行  用各种语言 编写的MapRedue 程序。 在本章中,我们将看到 用 Java , Ruby , Python 和  C++ 这些不同语言 编写的  不同版本。

最重要的是, MapReduce 程序 本质上  是并行的, 因此可以 将大规模的数据分析 交给  任何 一个 拥有 足够多机器的运行商

MapReduce  的 优势 在于 处理大型数据集,所以  下面首先来看一个例子。


使用 Hadoop 进行 数据分析

为了更好地发挥 Hadoop 提供的 并行 处理机制 的  优势, 我们 必须 把查询 标识成  Map Reduce 作业。

经过 一些 本地的 小规模测试,我们能够 在机器 集群上 运行它。


map 和 reduce

MapReduce 的  工作过程分为两个阶段: map 阶段 和 reduce 阶段。

每个阶段 都有 键/值 作为输入和输出,并且 它们的类型可由程序员  选择。程序员 还具体 定义了 两个 函数: map 函数 和 reduce 函数。

 

我们在   map 阶段 输入的 是 原始的 NCDC数据。 我们选择的是一种 文本 输入格式, 以便 数据集的每一行 都会是一个 文本值。

是 在 文件 开头部分文本行  起始 处的 偏移量, 但我们没有这 方面的需求, 所以 将其 忽略。

 

map 函数很简单。 我们 使用 map  函数 来找出 年份 和 气温,  因为我们只对 它们有兴趣。 在本例中, map 函数 只是 一个  数据准备 阶段, 

通过这种方式 来建立数据,  使得 reduce 函数 能在此 基础上进行  工作: 找出 每年的最高气温。

map 函数 也是 很适合  去除 已损 记录的 地方: 在这里, 我们 将 筛选 掉 缺失的、不可靠的或 错误的气温数据。


 

为了 全面 了解 map 的  工作方式, 我们思考下面几行 示例 的 输入 数据()

这些 行  以 键/值 对的方式 来表示  map 函数:

 键 是 文件中的 行 偏移量, 而这往往是我们在 map 函数 中 所忽视的

map 函数的功能 仅仅 提取 年份 和 气温(以粗体 显示),并将其 作为 输出被 发送。(气温值 已被 解释为整数)

map 函数的输出 先由 MapReduce 框架处理, 然后 再被 发送到 reduce 函数。

这一处理过程 根据 键/值对  进行排序 和 分组。 因此,继续我的示例,reduce  函数 会到 如下输入:

每年的年份后 都有一系列  气温 读数。所有 reduce 函数 现在必须重复 这个列表 并从中找出最大的读数:

这是最后的输出: 全球 气温纪录中每年的最高气温。

 

整个数据流如图 2-1 所示。  在图的底部是 Unix 的 管道, 模拟整个 MapReduce的 流程, 其中的内容 我们将在以后 讨论 Hadoop 数据流时 再次提到。

                                              MapReduce 的逻辑数据流

                               

posted @ 2016-04-09 15:24  行者无疆Duffy  阅读(102)  评论(0编辑  收藏  举报