发布网友 发布时间:2022-12-13 15:15
共1个回答
热心网友 时间:2024-09-30 19:25
maprece工作流程如下:
1、输入分片(input split):在进行map计算之前,maprece会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身。
假如我们设定hdfs的块的大小是64mb,如果我们输入有三个文件,大小分别是3mb、65mb和127mb,那么maprece会把3mb文件分为一个输入分片(input split),65mb则是两个输入分片(input split)而127mb也是两个输入分片(input split)。
即我们如果在map计算前做输入分片调整,例如合并小文件,那么就会有5个map任务将执行,而且每个map执行的数据大小不均,这个也是maprece优化计算的一个关键点。
2、map阶段:程序员编写好的map函数了,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行。
3、combiner阶段:combiner阶段是程序员可以选择的,combiner其实也是一种rece操作,因此我们看见WordCount类里是用rece进行加载的。
Combiner是一个本地化的rece操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作。
4、shuffle阶段:将map的输出作为rece的输入的过程就是shuffle了。
5、rece阶段:和map函数一样也是程序员编写的,最终结果是存储在hdfs上的。