MapReduce 是适合海量数据处理的编程模型。Hadoop是能够运行在使用各种语言编写的MapReduce程序: Java, Ruby, Python, and C++. MapReduce程序是平行性的,因此可使用多台机器集群执行大规模的数据分析非常有用的。
MapReduce程序的工作分两个阶段进行:
Map阶段
Reduce 阶段
输入到每一个阶段均是键 - 值对。此外,每一个程序员需要指定两个函数:map函数和reduce函数,整个过程要经历三个阶段执行,即
MapReduce如何工作
让我们用一个例子来理解这一点 –
假设有以下的输入数据到 MapReduce 程序,统计以下数据中的单词数量:
Welcome to Hadoop Class
Hadoop is good
Hadoop is bad
MapReduce 任务的最终输出是:
bad | 1 |
Class | 1 |
good | 1 |
Hadoop | 3 |
is | 2 |
to | 1 |
Welcome | 1 |
1、map任务执行结果到输出写入到本地磁盘的各个节点上,而不是HDFS。之所以选择本地磁盘而不是HDFS是因为,避免复制其中发生 HDFS 存储操作。
How is MapReduce organized
完整的执行流程(执行 Map 和 Reduce 任务)是由两种类型的实体的控制,称为
Jobtracker : 就像一个主(负责提交的作业完全执行)
多任务跟踪器 : 充当角色就像从机,它们每个执行工作
对于每一项工作提交执行在系统中,有一个 JobTracker 驻留在 Namenode 和 Datanode 驻留多个 TaskTracker。