一 概述:
(1)MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段,每个阶段都以键/值对作为输入和输出,并由程序员选择它们的类型。其中map阶段的输出必须和reduce阶段的输入类型一致。
(2)MapReduce作业(job)是客户端需要执行的一个工作单元:它包括输入数据、MapReduce程序和配置信息。
Hadoop将作业分为小任务(task)来执行,其中包括两类任务:map任务和reduce任务。
map任务的数量由输入分片的数量决定;reduce任务的数量可由参数指定。
(3)有两类节点控制作业执行过程:一个jobtracker和一系列tasktracker。
jobtracker通过调度tasktracker上运行的任务,来协调所有运行在系统上的作业。
tasktracker在运行任务的同时将运行进度报告发给jobtracker,jobtracker由此记录每项作业任务的整体进度。
(4)Hadoop将MapReduce的输入数据划分成等长的小数据块,称为输入分片(input split)或简称分片。
Hadoop会为每一个分片构建一个map任务,并由该任务来运行用户自定义的map函数从而处理分片中的每条记录;reduce阶段对每个key调用reduce函数。
(5)数据本地化:Hadoop在存储有输入数据的节点上运行map任务,可以获得最佳性能。
reduce任务不具备数据本地化的优势——单个reduce任务的输入通常来自于所有的map任务的输出。
reduce任务的数量不是由输入数据决定的,而是特别指定的。
(6)每个reduce任务都有一个输出文件,reduce的输出通常保存在HDFS中以实现可靠存储。
map任务的将其输出写入本地磁盘而非HDFS。原因:因为map任务的输出是中间结果,该中间结果由reduce任务处理后才产生最终结果,而且一旦作业完成,map的输出结果可以被删除,因此把它存储在HDFS中并实现备份,难免有些小题大做。
二 MapReduce作业运行机制
待续...