博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop深入学习:Combiner
阅读量:2435 次
发布时间:2019-05-10

本文共 1276 字,大约阅读时间需要 4 分钟。

在本节中,我们着重学习MapReduce编程模型中的Combiner组件。

        每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能,是MapReduce的一种优化手段之一。
        1)、Combiner最基本是实现本地key的聚合,对map输出的key排序、value进行迭代。如下所示:

引用
       
map:(key1,value1) ——> list(key2,value2)
        conbine:(key2,list(value2)) ——> list(key2,value2)
        reduce:(key2,list(value2)) ——> list(key3,value3)
       

        2)、Combiner还有本地reduce功能(其本质上就是一个reduce):

引用
       
map:(key1,value1) ——> list(key2,value2)
        conbine:(key2,list(value2)) ——> list(key3,value3)
        reduce:(key3,list(value3)) ——> list(key4,value4)
       

        3)、如果不用Combiner,南无说有的结果都会在reduce端完成,效率比较低小,并且会占用很多的网络IO;使用Combiner先完成在map端的本地聚合,可以减少网络传输数据量,提高性能。
        但是,不要以为在写MapReduce程序时设置了Combiner就认为Combiner一定会起作用,实际情况是这样的吗?答案是否定的。hadoop文档中也有说明Combiner可能被执行也可能不被执行。那么在什么情况下不执行呢?如果当前集群在很繁忙的情况下job就是设置了也不会执行Combiner。
        另外还要注意,Combiner使用的合适的话会提高Job作业的执行数度,但是使用不合适的话,会导致输出的结果不正确。Combiner的输出是Reduce的输入,它绝不会改变最终的计算结果。
        Conbiner的适用场景比如说在汇总统计时,就可以使用Conbiner,但是在求平均数的时候就是适合适用了。
        最后,我们再来看一下Combiner的执行时机。我们之前已对map端的shuffle做过比较升入的了解,详情请看。那么,Combiner会在map端的那个时期执行呢?实际上,Conbiner函数的执行时机可能会在map的merge操作完成之前,也可能在merge之后执行,这个时机由配置参数min.num.spill.for.combine(该值默认为3),也就是说在map端产生的spill文件最少有min.num.spill.for.combine的时候,Conbiner函数会在merge操作合并最终的本机结果文件之前执行,否则在merge之后执行。通过这种方式,就可以在spill文件很多并且需要做conbine的时候,减少写入本地磁盘的数据量,同样也减少了对磁盘的读写频率,可以起到优化作业的目的。

转载地址:http://tkmmb.baihongyu.com/

你可能感兴趣的文章
Cookie对象入门详解
查看>>
HashMap的remove()方法详解
查看>>
单例模式-分解步骤,逐步解析
查看>>
通过Form表单一次性拿到json格式数据,及后台接收
查看>>
## EL表达式与JSTL标签用法解读
查看>>
Mybatis异常:The content of elements must consist of well-formed.......(一般出现在写分页/带大于小于号的SQL)
查看>>
Mybatis光速入门(配置文件模块)
查看>>
关于Oracle的主键自增如何设置
查看>>
手撕HashMap的resize()方法源码渗透解析+图解
查看>>
Mybatis常见异常类型Could not set parameters for mapping离不开这个原因!
查看>>
Thymeleaf中一个页面怎么嵌套另一个页面,关于页面嵌套,标签告诉你应该知道的
查看>>
JAVA如何实现短信验证码--阿里云接口,新手式图文教学,个人项目有这一篇就够了
查看>>
Java中大小数BigDecimal的加减乘除用法及场景的详细介绍,看完不信你还会报Syntax error on token “+/-/*“, invalid AssignmentOperat异常
查看>>
UVa 10917 Dijkstra
查看>>
CF403B/CF402D
查看>>
CF402E / 403C
查看>>
cf404b
查看>>
cf404c
查看>>
cf404d
查看>>
武大网络预赛 Problem 1545 - I - Twenty-four
查看>>