MapReduce执行步骤如下
1、Mapper任务处理
1.1:读取输入文件内容,将每一行解析成key、value对提供给Mapper类的map函数使用,每个键值对调用一次map函数。
1.2:在Mapper类的map函数中使用自定义的业务逻辑,对输入key、value处理并转换成新的key、value输出。
1.3:对输入的key、value进行分区。默认分区数为1。
1.4:对不同分区的数据按照key进行排序、分组,将相同key的value放到一个集合中。
1.5:对分组后的数据进行规约,此步骤不是必须的。
2:Reducer任务处理
2.1:对多个map任务的输出按照不同的分区,通过网络copy到不同的reduce节点。然后对多个map任务的输出进行合并、排序。
2.2:在Reducer类的reduce函数中使用自定义的业务逻辑,对输入的key、value处理,转换成新的key、value输出。
2.3:将Reducer类reduce函数的输出保存到文件中。
逻辑上讲MapReduce运行过程分为3个阶段:
1、Mapper阶段
2、Shuffle阶段
3、Reducer阶段
Mapper任务数量是由输入分片InputSplit决定,输入分片则由文件/HDFS默认Bolck块大小决定(Hadoop-0.x和Hadoop-1.x为64MB;Hadoop-2.x为128MB,不足一个Bolck时按照一个Block计算)。
例如在Hadoop-2.x中,输入文件大小为500MB,则为500MB/128MB=3%116,这时候则为4个块大小也就是被InputSplit切分为4个Block。这时候MapReduce作业的Mapper任务为4个。
Reducer任务数量默认为1个;在MapReduce作业中如果不使用分区函数则默认是一个分区,每个分区对应一个Reducer任务。
Reducer的最优个数与集群中可用的Reducer任务槽总数相关,总槽数由集群节点数量*每个节点的任务槽数量,每个节点的任务槽数由。