共计 1450 个字符,预计需要花费 4 分钟才能阅读完成。
梳理一下 MapReduce 1 的基本概念,仅供参考。
上面这个图,基本上可以说明 MapReduce 的工作流程。下面细说,并举了一个实例。
MapReduce 工作就是将处理过程划分为两个阶段:map 阶段和 reduce 阶段。每个有 key-value 对作为输入和输出,其类型是由程序员选择的。程序员能够指定有个函数:map 函数和 reduce 函数。
举一个简单的例子,具体说明 MapReduce 的工作细节。假设有一堆天气数据需要处理,而我们仅对天气数据中的年份和气温字段信息感兴趣。一个 map 函数的功能就是一个数据准备阶段,准备好 Reduce 阶段能够处理的数据,而 reduce 函数将一年中的多个气温(temperature)数据中取最大的值。map 函数需要将错误数据以及一些不符合规则的数据给过滤掉,筛选出有效数据,传送给 reduce 阶段进行处理。
为了可视化 map 的工作,假设有下列输入文件中的多行记录数据
0067011990999991950051507004…9999999N9+00001+99999999999…
0043011990999991950051512004…9999999N9+00221+99999999999…
0043011990999991950051518004…9999999N9-00111+99999999999…
0043012650999991949032412004…0500001N9+01111+99999999999…
0043012650999991949032418004…0500001N9+00781+99999999999…
到了 map 函数处理阶段,数据就变成 key-value 对。
(0, 0067011990999991950051507004…9999999N9+00001+99999999999…)
(106, 0043011990999991950051512004…9999999N9+00221+99999999999…)
(212, 0043011990999991950051518004…9999999N9-00111+99999999999…)
(318, 0043012650999991949032412004…0500001N9+01111+99999999999…)
(424, 0043012650999991949032418004…0500001N9+00781+99999999999…)
关键字是线性偏离,我们在 map 函数中可以忽略。map 复制抓取到对应 year 和 temperature 字段,最后发布给对应的 reduce 函数作进一步处理。提交的数据如下:
(1950, 0)
(1950, 22)
(1950, −11)
(1949, 111)
(1949, 78)
在发送到 reduce 函数处理前,这个输出会被 MapReduce 框架处理。MapReduce 框架的处理包括以关键字进行排序和分组等。在 reduce 处理前,看到的数据就是这样:
(1949, [111, 78])
(1950, [0, 22, −11])
reduce 函数将根据关键字来迭代 value,选出最大的值作为 key 的 value,并将这对值输出。
(1949, 111)
(1950, 22)
上面便是最终的输出结果序列。整个处理过程可以用下列这个流程图来说明。
后续将介绍 MapReduce 2, 即 YARN(Hadoop 2 新推出的架构)。待续!