MapReduce是一个软件框架,可以将单个计算作业分配给多台计算机执行。它假定这些作业在单机上需要很长的运行时间,因此使用多台机器缩短运行时间。常见的例子是日常统计数字汇总,该任务单机上执行时间将超过一整天。
优点:可在短时间内完成大量工作。
缺点:算法必需经过重写,需要对系统工程有一定的理解。
适用数据类型:数值型和标称型数据。
MapReduce在大量节点组成的集群上运行。
工作流程:单个作业被分成很多小份,输入数据也被切片分发到每个节点,各个节点只在本地数据上做运算,对应的运算代码称为mapper,这个过程被称为map阶段。每个mapper的输出通过某种方式组合(一般还会做排序)。排序后的结果再被分成小份分发到各个节点进行下一步处理工作。第二步的处理阶段被称为reduce阶段,对应的运行代码被称为reducer。reducer的输出就是程序的最终执行结果。
在map和reduce阶段中间,有一个sort或combine阶段。mapper和reducer传输的数据形式为key/value对。
MapReduce的优势在于,它使得程序以并行方式执行。
注意:在任何时候,每个mapper或reducer之间都不进行通信。每个节点只处理自己的事务,且在本地分配的数据集上运算。
MapReduce的整个编配工作由主节点控制。这些主节点控制整个MapReduce作业编配,包括每份数据存放的节点位置,以及map、sort和reduce等阶段的时序控制等。此外,主节点还要包含容错机制。一般地,每份mapper的输入数据会同时分发到多个节点形成多份副本,用于事务的失效处理。
在一些的MapReduce的实现上,在多个机器上都保存有数据的多个备份,例如在机器0上存放的输入数据可能还存放在机器1上,以防机器0出现问题。同时,每个节点都必须与主节点通信,表明自己工作正常。如果某节点失效或工作异常,主节点将重启该节点或将节点移出可用机器池。