整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

5.7.1将问题分解成MapReduce作业

hadoop 小红牛 6℃ 0评论

让我们看一个更复杂的问题,我们想把它转换成MapReduce工作流。

假设我们想找到每个气象台每年每天的最高气温记录的均值。例如,要计算029070~99999气象台的1月1日的每日最高气温的均值,我们将从这个气象台的190丨年1月丨日,1902年1月1日,直到2000年的1月1日的气温中找出每日最高气温的均值。

我们如何使用MapReduce来计算它呢?计算自然分解为下面两个阶段。

⑴计算毎对stationdate的毎日最髙气温。

本例中的MapReduce程序是最高气温程序的一个变种,不同之处在于本例中的键是一个综合的stationdate对,而不只是年份。

(2)计算毎个stationdaymonth键的每日最高气温的均值。

mapper从上一个作业得到输出记录(stationdate,最高气温值),丢掉年份部分,将其值投影到记录(stationdaymonth,最髙气温值)。 然后reducer为每个stationdaymonth键计算最髙气温值的均值。

第一阶段的输出看上去就是我们想要的气象台的信息。范例中的

脚本提供了HadoopStreaming的一个实现:

029070-99999190101010029070-9999919020101-94

前两个字段形成键,最后一列是指定气象台和日期所有记录中的最高气

 

温。第二阶段计算这些年份中每日最高气温的平均值:

029070-999990101-68

以上是气象台029070-99999在整个世纪中1月1日的日均最高气温-6.8‘C

只用一个MapReduce过程就能完成这个计算,但它可能会让部分程序员花更多精力。®

个作业可以包含多少(简单的)MapReduce步骤,这样整个作业由多个可分解的、可维护的mapperreducer组成。第16章的案例学习包括使用MapReduce来解决的大量实际问题,在每个例子中,数据处理任务都是使用两个或更多MapReduce作业来实现的。对于理解如何将问题分解成MapReduce工作流,第16章所提供的详细介绍非常有价值。

相对于我们已经做的maPPer_reducer完全可以进一步分解。maPPer一般执行输入格式解析、投影(选择相关的字段)和过滤(去掉无关记录)。在前 面的mapper中,我们在一个mapper中实现了所有这些函数。然而,还可以将这些函数分割到不同的maPPer,然后使用HadooP自带的ChainMapper类库将它们连接成一个mapper。结合使用ChainReducer,你可以在一个MapReduce作业中运行一系列的mapper,再运行一个reducer和另一个mapper链。

转载请注明:全栈大数据 » 5.7.1将问题分解成MapReduce作业

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址