MapReduce模型

一、分布式并行编程

谷歌公司最先提出了分布式并行编程模型MapReduce,Hadoop MapReduce是它的开源实现,后者比前者使用门槛低很多 。

传统并行计算框架:如MPI(Message Passing Interface,消息传递接口)。

  MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。
主要的MPI-1模型不包括共享内存概念,MPI-2只有有限的分布共享内存概念。 但是MPI程序经常在共享内存的机器上运行。在MPI模型周边设计程序比在NUMA架构下设计要好因为MPI鼓励内存本地化

SAN:存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通道)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络

共享内存/共享存储:集群硬件紧密耦合,一个硬件故障可能导致集群故障,集群容错性差。

传统并行计算框架只能通过增加内存,硬盘来做纵向扩展,增加机器的横向扩展性差。相反MapReduce横向扩展性很好。

二、 MapReduce模型简介

MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和Reduce
编程容易,不需要掌握分布式并行编程细节,也可以很容易把自己的程序运行在分布式系统上,完成海量数据的计算
MapReduce策略:采用“分而治之”策略一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理
MapReduce理念:设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为,移动数据需要大量的网络传输开销
MapReduce框架采用了Master/Slave架构,包括一个Master和若干个Slave。Master上运行JobTracker(负责作业管理、任务调度),Slave上运行TaskTracker(负责任务处理)
Hadoop框架是用Java实现的,但是,MapReduce应用程序则不一定要用Java来写

三、 Map和Reduce函数

框架传递给我们待实现的 mapper()的输入数据中,key 是要处理的文本中一行的起始偏移量,为 Long 类型,value是这一行的内容,为 String 类型。

 

Map:将原始输入的键值对<k1,v1>中的值v1进行解析,生成一批多个新的键值对<k2,v2>,即为List<k2,v2>。

     <k2,List(v2)>表示键都为k2的多个键值对。如<"a",<1,1,1>>表示<"a",1>、<"a",1>、<"a",1>键值对

 Reduce:对Map输出的多个键值对进行汇总合并,即对相同Key的键值对合并为一个键值对。如<"a",<1,1,1>>变为<"a",3>

四、MapReduce任务可行性分析

  并非所有任务都适合MapReduce来处理。

  只有输入可分片,分片后的数据可并行处理,处理过程不需要依赖其他分片信息的任务才可使用MapReduce来处理

posted on 2017-06-26 22:36  ostin  阅读(544)  评论(0)    收藏  举报