4day-hadoop高级编程接口.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4day-hadoop高级编程接口

=============================Hadoop高级编程接口======================= Partitioner编程 自定义排序编程 Combiner编程 常见的MapReduce算法 加深拓展---MapReduce原理及源码分析 partitioner编程: 自定义的Partitioner必须先继承Partitioner类 Partitioner是partitioner的基类,如果需要定制partitioner也需要继承该类。 2. HashPartitioner是mapreduce的默认partitioner。计算方法是 which reducer=(key.hashCode() Integer.MAX_VALUE) % numReduceTasks,得到当前的目的reducer。 3. (例子以jar形式运行) ## Partitioner的原理: Partitioner会根据数据分区规则,将数据分配给不同的Reducer,给了不同的Reducer就会最终产生不同的文件。 ## Maven的使用管理 有了pom.xml文件,就不在需要在项目中在创建出lib包,但是我们需要在pom.xml文件中写入一些依赖。 ## Combiner的概念: 每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量。 combiner最基本是实现本地key的归并,combiner具有类似本地的reduce功能。 如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。 注意:Combiner的输出是Reducer的输入,如果Combiner是可插拔的,添加Combiner绝不能改变最终的计算结果。所以Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。 ** 所以Combiner就是一个特殊的Reducer,这个Reducer将在Mapper端进行执行,达到合并数据减少Reducer压力的作用 例如:对于统计词频的这个程序,现在Mapper端进行一次小计,然后再在Reduce端进行一次总计 **Combiner的输入是Mapper的输出,Combiner的输出是Reducer的输入; **增加Combiner时,如果Combiner是可插拔的,则可以1、推测Combiner的功能与Reducer的功能是一样的,2、且Combiner绝不可以改变最终的计算结果,3、Combiner在可插拔是只适用于Reducer的输入与输出类型完全一致的情况 Thinking:Combiner是否可以适用于求平均值的场景? 所以在求平均数的情况下,不可以使得Combiner和Reducer的功能一样,只用改变Combiner的功能计算出来的平均数才不会出错,所以要求这个Combiner输出的是小计总合,相加的个数 ## 倒排索引?一个全文检索的结构 使用MR(类似 wordcount)实现一个倒排索引 以上是需要的输出结果; 倒推code: Mapper的代码: //mapper(1) //表示一个单词的出现次数作为key,由于单词在文件中出现过3次,所以输出3次 context.write(“hello-a.txt”,”1”) context.write(“hello-a.txt”,”1”) context.write(“hello-a.txt”,”1”) 如果添加了一个不可插拔的Combiner,到时在集群中进行运算时,会产生错误 得到的结果:”hello”-a.txt, {1,1,1} //反推得到一个map不能完成计算,所以需要多个map context.write(“hello”,”a.txt-3”) context.write(“hello”,”b.txt-2”) context.write(“hello”,”c.txt-2”)//map方法被调用很多次,输出很多次,之后安照hello这个key进行分组 redeucer的代码: 接受的数据格式: ”hello”,{“a.txt-3”,”b.txt-2”,”c.txt-2”} context.write(“hello”,”a.txt-3 b.txt-2 c.txt-2”)

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档