一、为什么要用MapReduce?
首先MapReduce被广泛应用于日志分析、海量数据的排序、在海量数据中查找特定模式等 场景。而且它非常简单,易于实现且扩展性强。可以通过它编写同事在多台主机上运行的程序,可以使用Python/PHP/C++等非java类语言编写map或reduce程序。还可以在任何安装Hadoop的集群中运行同样的程序,不论这个集群有多少台主机。
二、MapReduce计算模型
在Hadoop中,用于执行MapReduce任务的机器角色有两个:
一个是JobTracker,另一个是TaskTracker。JobTracker是用于调度工作的,TaskTracker是用于执行工作的。而一个Hadoop集群中只有一台JobTracker。
三、MapReduce的Job
在Hadoop中,每个MapReduce任务都被初始化为一个job,每个job又可以分为两个阶段:map阶段和reduce阶段。这两个阶段分别用两个函数来表示,也就是map函数和reduce函数。
map函数接受<key,list of value>形式的输入,然后对value集合进行处理。
reduce 函数产生0或1个输出。reduce的输出格式也是<key,value>形式的。