使用Hadoop来分析历年的温度数据(map,reduce的处理流程解释)

作者: admin 分类: Hadoop 发布时间: 2018-02-26 09:04  阅读: 733 views

MapReduce提出一个编程模型,该模型抽象出这些硬盘读写问题并将其转换为一个数据集(由键值对组成)的计算。由map和reduce两部分组成。而且只有这两部分提供对外的接口。
MapReduce看似采用了一种蛮力方法。每个查询需要处理整个数据集或至少一个数据集的绝大部分。但这也正是他的能力。MapReduce是一个批量查询处理器。能够在合理的时间范围内处理针对整个数据集的动态查询。

为了充分利用Hadoop提供的并行处理优势,我们将查询表示成MapReduce作业。


map和reduce的工作逻辑数据流
MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段。每个阶段都是以键值对作为输入和输出。程序员还需要些两个函数:map函数和reduce函数。
map阶段的输入是NCDC的原始数据(气象数据),以文本格式作为输入格式,将数据集的每一行作为文本输入。map函数比较简单,由于只对年份/气温属性感兴趣,所以只需要取出这两个字段。本例中,map是一个数据准备阶段,使reducer函数能够继续对它进行处理:即找出每年的最高气温。map函数还是一个比较适合去除已损记录的地方:
以下为示例数据

0067011990999991950051507004…9999999N9+00001+99999999999…
0043011990999991950051512004…9999999N9+00221+99999999999…
0043011990999991950051518004…9999999N9+00111+99999999999…
0043012650999991949032312004…0500001N9+01111+99999999999…
0043012650999991949032418004…0500001N9+00781+99999999999…
数据范例:data_1.0


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

(0, 0067011990999991950051507004…9999999N9+00001+99999999999…)
(106,0043011990999991950051512004…9999999N9+00221+99999999999…)
(212,0043011990999991950051518004…9999999N9+00111+99999999999…)
(318,0043012650999991949032312004…0500001N9+01111+99999999999…)
(424,0043012650999991949032418004…0500001N9+00781+99999999999…)
数据范例:data_1.1


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


(1950,0)
(1950,22)
(1950,-11)
(1949,111)
(1949,78)
数据范例:data_1.2


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


(1949,[111,78])
(1950,[0,22,-11])
数据范例:data_1.3


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


(1949,111)
(1950,22)
数据范例:data_1.4


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

整个数据流如下所示:模拟整个MapReduce的流程.


   原创文章,转载请标明本文链接: 使用Hadoop来分析历年的温度数据(map,reduce的处理流程解释)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读