# Hadoop之MapReduce

Hadoop之MapReduce

## 简介

​ Hadoop中的MapReduce是一个使用简易的软件框架，基于它写出来的应用程序能够运行在由上千台商用机器组成的大型集群上，并以一种可靠容错的方式并行处理上T级别的数据集，实现了Hadoop在集群上的数据和任务的并行计算与处理。

​ 一个Map/Reduce作业（Job）通常会把输入的数据集切分为若干独立的数据块，由Map任务（Task）以完全并行的方式处理它们。通常，Map/Reduce框架和分布式文件系统是运行在一组相同的节点上的，也就是说，计算节点和存储节点在一起。这种配置允许框架在那些已经存好数据的节点上高效地调度任务，这样可以使整个集群的网络带宽得到非常高效的利用。

## MapReduce的计算模型

​ Map/Reduce框架由一个单独的Master **JobTracker**和集群节点上的Slave **TaskTracker**共同组成。Master负责调度构成一个作业的所有任务，这些任务分布在不同的slave上。Master监控它们的执行情况，并重新执行已经失败的任务，而Slave仅负责执行由Master指派的任务。一个Hadoop集群只有一个Master JobTracker。

​ 在Hadoop中，每个MapReduce任务都被初始化为一个job。每个Job又可以分为两个阶段：Map阶段和Reduce阶段。这两个阶段分别用两个函数来表示，即Map函数和Reduce函数。Map函数接收一个＜key, value＞形式的输入，然后产生同样为＜key, value＞形式的中间输出，Hadoop会负责将所有具有相同中间key值的value集合到一起传递给Reduce函数，Reduce函数接收一个如＜key，（list of values）＞形式的输入，然后对这个value集合进行处理并输出结果，Reduce的输出也是＜key,value＞形式的。为了方便理解，分别将三个＜key, value＞对标记为＜k1，v1＞、＜k2，v2＞、＜k3，v3＞，那么上面所述的过程就可以用下图来表示了：

![](https://3037548586-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LnpynfpU0w3FBTJVlOK%2Fsync%2Fa9659e66d398f22d9f8ee729e8ba13e92b862503.png?generation=1589894629093324\&alt=media)
