MapReduce运行过程以及原理

 1.map和reduce

MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段。每个节点都以键值对作为输入和输出,其类型由程序员来选择。程序员还需要编写两个函数:map函数和reduce函数。

map阶段的输入时NCDC原始数据。我们选择文本格式作为输入格式,将数据集的每一行作为文本输入。键是某一行起始位置相对于文本起始位置的偏移量,不过我们不需要这个信息,所以将其忽略。

我们的map函数很简单。由于我们只对年份和气温属性感兴趣,所以只需要取出这两个字段数据。在本例中,map函数只是一个数据准备阶段,通过这种方式来准备数据,使reducer函数能够继续对它进行处理:即找出每年的最高气温。map函数韩式一个比较适合去除已损记录的地方:此处,我们筛掉缺失的,可疑的或者错误的气温数据。

为了全面了解mao的工作方式,我们考虑以下输入数据的示例数据:

  0067011990999991950051507004...9999999N9+00001+9999999999...

  0043011990999991950051512004...9999999N9+00221+9999999999...

  0043011990999991950051518004...9999999N9-00111+9999999999...

这些行以键值对的方式作为map函数的输入:

(0,0067011990999991950051507004...9999999N9+00001+9999999999...)

(106,0043011990999991950051512004...9999999N9+00221+9999999999...)

(212,0043011990999991950051518004...9999999N9-00111+9999999999...)

键(key)是文件中的行偏移量,map函数并不需要这个信息,所以将其忽略。map函数的功能仅限于提取年份和气温信息(以粗体显示),并将它们作为

输出(气温值已用整数表示):

(1950,0)

(1950,22)

(1950,-11)

(1949,111)

(1949,78)

map函数的输出经由MapReduce框架处理后,最后发送到reduce函数。这个处理过程基于键来对键值对进行排序和分组。因此,在这一示例中,reduce函数看到的是如下输入:

(1949,[111,78])

(1950,[0,22,-11])

每一年份后紧跟着一系列气温数据。reduce函数现在要做的是遍历整个列表从中找出最大的读数:

(1949,111)

(1950,22)

这是最终输出结果:每一年的全球最高气温记录。

原文地址:https://www.cnblogs.com/jingblogs/p/5519036.html