天天看点

面试那点事之 白话理解: MapReduce 详细执行步骤

MapReduce 详细执行步骤一共有八部,我把他简称为:天龙八部 

天龙八部

执行步骤:

1. map任务处理

1.1 读取输入文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。

1.2 写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。

1.3 对输出的key、value进行分区。 

白话理解分区:看mapreduce的原理图map输出的这3个分支就代表3个分区,map的输出怎么会输出3个分区呢,他有可能输出10 或者输出1个分区吗,答案是都有可能,他分成几个分区是由谁来觉得的,这与业务相关。,我们的map任务在1.3中会对map进行分区

1.4 对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中。

白话理解排序:对不同分区,这里的对象变了,是不同分区,按照key进行排序,【这里的key就是1.2中的输出】如果能key能排序意味着key他是实现了combarable接口的。实现了combarTo方法,还有一个分组,分组: 是他把相同key的value放到一个集合中,我说把相同key的value放到一个集合中,并没说集合中的元素怎么处理,仅仅是放到一个集合中

1.5 (可选)分组后的数据进行归约。

白话理解归约:简单理解 就是把大的数据集合变为小的数据集合这个过程叫做归约。举例(eg)加减乘除,加减乘除运算是一个等式运算,等式的左边是多个元素、右边是一个元素,那么把多元素的集合就变成一个元素的集合了,这个步骤就是归约。

归约是可选的,因不是所有的数据都适合规约,比如,绝对值

2.reduce任务处理

2.1 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。

2.2 对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、value处理,转换成新的key、value输出。

白话理解reduce 2.2阶段的合并,:为什么合并,因为是多个map,为什么排序,前面不是排序好了吗。注意,每一个map任务是排序好,但是多个map任务之间是没有排序的,我们的reduce接受的是多map任务,所有他要重新排序,排序完成后我们要覆盖reduce函数实现自己的业务逻辑,对输入的key、value处理,转换成新的key、value输出。【提示:这个地方类似与map1.4阶段的执行过程,需要注意的时候,map 1.4阶段输出是以个分组,是分组数据调用reduce,不是一个一个的键值对调用reduce】

2.3 把reduce的输出保存到文件中。

转载于:https://my.oschina.net/dataRunner/blog/363005

继续阅读