应用程序分为Map和Reduce两阶段,分别由一个或多个Map Task和Reduce Task组成,每个Map Task处理输入数据集合中的一片数据(InputSplit),并将产生的若干个数据片段写到本地磁盘上,而Reduce Tsak则从每个Map Task上远程拷贝相应的数据片段,经分组聚集和归约后,将结果写到HDFS上作为最终结果。
对于MapTask而言,运行过程为:
通过用户提供的InputFormat将对应的InputSplit解析成一系列
key/value,依次交给用户编写的map()函数处理;接着按照指定的Partitioner对数据分片,以确定每个key/value将交给拿个ReduceTask处理;之后将数据交给用户定义的Combine进行一次本地归约(可选);最后将数据结果保存到本地磁盘上。
对于Reduce Task,运行过程:
输入数据来自各个Map Task,因此首先需要通过HTTP请求从各个已经运行完成的Map Task上拷贝对应的数据分片,待所有数据拷贝完成后,再以key为关键字对所有数据进行排序,通过排序,key相同的记录聚集到一起形成若干分组,然后将每组数据交给用户编写的reduce()函数处理,并将结果直接写到HDFS上作为最终输出结果。