学习笔记

1 MapReduce概述

2004年,Google在OSDI 2014上宣布了MapReduce编程模型。这使得不熟悉并行计算和分布式处理系统的程序员能够充分利用分布式系统。

MapReduce旨在处理大量原始数据,封装复杂的细节,如并行计算,容错,数据分发,负载平衡,以及允许程序员专注于创建Map和Reduce函数。程序员可以使用MapReduce模型和用户实现的Map和Reduce函数轻松实现大规模并行计算。此外,MapReduce独特的“重放”功能还提供了重大的灾难恢复实施。

换句话说,MapReduce的主要贡献是通过简单的界面自动并行化和大规模分布式计算。 MapReduce模型接口可在许多流行的计算机上实现高性能计算。

MapReduce编程模型的原理是使用一组输入键 - 值对生成键值对的输出集。此过程的实现要求用户提供自定义Map和Reduce功能。
其中,Map函数接受输入键/值对,然后生成一组中间键/值对。然后,MapReduce库将所有中间值组合到同一个键中,并将它们传递给Reduce函数。

Reduce函数接受一个中间键和相应的值集,并将值值融合以获得一组较小的值。通常,每个Reduce调用仅生成0或1个输出值。中间值通过迭代器传递给用户的reduce函数。这允许您使用太大而不适合内存的值列表。

2 执行流程概述

(1)用户程序首先调用MapReduce库将输入文件分成M个数据段。每个数据段的大小通常为16MB到64MB(用户可以使用可选参数控制每个段的大小)。之后,程序的许多副本被复制到计算机集群。
(2)在(1)中复制的程序副本中有一个称为master的特殊程序,但是它是一个worker,任务由master分配。有M个地图任务和R减少任务被分配。主设备为每个空闲工作人员分配地图任务或减少任务。
(3)分配了map任务的worker读取相应输入片段的内容,从输入数据中解析键值对,并将每个键值对传递给用户定义的Map函数。 Map函数生成的中间键值对缓存在内存中。
(4)通过分区功能将高速缓存中的键值对周期性地写入划分为R区域的本地磁盘。这些缓存键值的地址将返回到磁盘上的主站,主站将存储它们。该地址将传递给reduce worker。
(5)当还原工作程序接收到从主服务器传递的数据存储地址时,还原工作程序调用远程工作程序并从映射工作程序所在的磁盘读取高速缓存数据。当reduce工作者读取所有中间数据时,根据中间密钥对数据进行排序,因此组合对应于相同密钥的所有数据。这里的排序过程是必要的,因为许多不同的键被映射到同一个reduce任务。如果中间数据中的数据量太大而无法在内存中进行排序,则需要进行外部排序。
(6)Reduce工作者遍历有序的中间数据。对于每个唯一的中间密钥,将密钥及其相应的中间值集传递给用户的Reduce函数。 Reduce函数的输出被添加到reduce分区的最终输出文件中。
(7)当所有map和shrink任务完成时,master将启动用户程序。此时,用户程序中的MapReduce调用将返回给用户代码。

上述过程成功完成后,mapreduce运行的输出存储在R输出文件中(每个reduce任务生成一个输出文件,文件名由用户指定)。通常,用户不需要将这些R输出文件合并为一个。通常,您将这些文件用作另一个MapReduce调用的输入,或者在另一个可以将输入处理为多个拆分文件的分布式应用程序中。

3 实现

MapReduce 模型可以有多种不同的实现方式。如何正确选择取决于具体的环境。例如,一种实现方式适
用于小型的共享内存方式的机器,另外一种实现方式则适用于大型 NUMA 架构的多处理器的主机,而有的实
现方式更适合大型的网络连接集群。
本章节描述一个适用于 Google 内部广泛使用的运算环境的实现:用以太网交换机连接、由普通 PC 机组
成的大型集群。在我们的环境里包括:

  1. x86 架构、运行 Linux 操作系统、双处理器、 2-4GB 内存的机器。
  2. 普通的网络硬件设备,每个机器的带宽为百兆或者千兆,但是远小于网络的平均带宽的一半。
  3. 集群中包含成百上千的机器,因此,机器故障是常态。
  4. 存储为廉价的内置 IDE 硬盘。一个内部分布式文件系统用来管理存储在这些磁盘上的数据。文件系
    统通过数据复制来在不可靠的硬件上保证数据的可靠性和有效性。
  5. 用户提交工作(job)给调度系统。每个工作(job)都包含一系列的任务(task),调度系统将这些任
    务调度到集群中多台可用的机器上。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值