码迷,mamicode.com
首页 > 其他好文 > 详细

mapreduce的工作流程

时间:2017-08-14 23:45:19      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:顺序   最小值   shu   12px   大小   apr   ace   工作流   输出   

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的工作流程

标签:顺序   最小值   shu   12px   大小   apr   ace   工作流   输出   

原文地址:http://www.cnblogs.com/Zchaowu/p/7360607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!