mapreduce的工作流程

Posted 张超五

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mapreduce的工作流程相关的知识,希望对你有一定的参考价值。

mapreduce工作的5个阶段(按照时间顺序):

  1.输入分片(input split)、
  2.map阶段、
  3.combiner阶段、
  4.shuffle阶段和
  5.reduce阶段
1.输入分片(input split):
  在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务
输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组,输入分片(input split)往往和hdfs的block(块)关系很密切
    假如我们设定hdfs的块的大小是64mb,如果我们输入有三个文件,大小分别是3mb、65mb和127mb,那么mapreduce会把3mb文件分为一个输入分片(input     split),65mb则是两个输入分片(input split)而127mb也是两个输入分片(input split),即我们如果在map计算前做输入分片调整,例如合并小文件,那么就会有5个map任务将执行,而且每个map执行的数据大小不均,这个也是mapreduce优化计算的一个关键点。
 
2.map阶段:
  程序员编写好的map函数了,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行;
 
3.combiner阶段:
  combiner阶段是程序员可以选择的,combiner其实也是一种reduce操作,因此我们看见WordCount类里是用reduce进行加载的。
Combiner是一个本地化的reduce操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作,例如我们对文件里的单词频率做统计,map计算时候如果碰到一个hadoop的单词就会记录为1,但是这篇文章里hadoop可能会出现n多次,那么map输出文件冗余就会很多,因此在reduce计算前对相同的key做一个合并操作,那么文件会变小,这样就提高了宽带的传输效率,毕竟hadoop计算力宽带资源往往是计算的瓶颈也是最为宝贵的资源,但是combiner操作是有风险的,使用它的原则是combiner的输入不会影响到reduce计算的最终输入,
例如:如果计算只是求总数,最大值,最小值可以使用combiner,但是做平均值计算使用combiner的话,最终的reduce计算结果就会出错。
 
4.shuffle阶段:
  将map的输出作为reduce的输入的过程就是shuffle了。
 
5.reduce阶段
  和map函数一样也是程序员编写的,最终结果是存储在hdfs上的。

以上是关于mapreduce的工作流程的主要内容,如果未能解决你的问题,请参考以下文章

MapReduce工作流程最详细解释

MapReduce 框架原理MapReduce 工作流程 & Shuffle 机制

Hadoop Mapreduce的工作流程

打怪升级之小白的大数据之旅(四十九)<MapReduce框架原理一:MapReduce工作流程&InputFormat>

mapreduce的工作流程

Hadoop--09---MapReduce_04----MapReduce工作流程Shuffle 机制Partition 分区