hadoop应用案例

上传人:豆浆 文档编号:11049055 上传时间:2017-10-11 格式:DOCX 页数:26 大小:281.32KB
返回 下载 相关 举报
hadoop应用案例_第1页
第1页 / 共26页
hadoop应用案例_第2页
第2页 / 共26页
hadoop应用案例_第3页
第3页 / 共26页
hadoop应用案例_第4页
第4页 / 共26页
hadoop应用案例_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《hadoop应用案例》由会员分享,可在线阅读,更多相关《hadoop应用案例(26页珍藏版)》请在金锄头文库上搜索。

1、adoop 是 Google MapReduce 的一个 Java 实现。MapReduce 是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同 java 程序员可以不考虑内存泄露一样, MapReduce 的 run-time 系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求。这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源。 一、概论作为 Hadoop 程序员,他要做的事情就是:1、定义 Mapper,处理输入的 Key-Value 对,输出中间结果

2、。2、定义 Reducer,可选,对中间结果进行规约,输出最终结果。3、定义 InputFormat 和 OutputFormat,可选,InputFormat 将每行输入文件的内容转换为 Java 类供 Mapper 函数使用,不定义时默认为 String。4、定义 main 函数,在里面定义一个 Job 并运行它。然后的事情就交给系统了。1.基本概念:Hadoop 的 HDFS 实现了 google 的 GFS 文件系统,NameNode 作为文件系统的负责调度运行在 master,DataNode 运行在每个机器上。同时 Hadoop 实现了 Google的 MapReduce,JobT

3、racker 作为 MapReduce 的总调度运行在 master,TaskTracker 则运行在每个机器上执行 Task。2.main()函数,创建 JobConf,定义 Mapper,Reducer,Input/OutputFormat 和输入输出文件目录,最后把 Job 提交給 JobTracker,等待 Job 结束。3.JobTracker,创建一个 InputFormat 的实例,调用它的 getSplits()方法,把输入目录的文件拆分成 FileSplist 作为 Mapper task 的输入,生成 Mapper task 加入 Queue。4.TaskTracker 向

4、 JobTracker 索求下一个 Map/Reduce。Mapper Task 先从 InputFormat 创建 RecordReader,循环读入 FileSplits 的内容生成 Key与 Value,传给 Mapper 函数,处理完后中间结果写成 SequenceFile.Reducer Task 从运行 Mapper 的 TaskTracker 的 Jetty 上使用 http 协议获取所需的中间内容(33% ) ,Sort/Merge 后( 66%) ,执行 Reducer 函数,最后按照 OutputFormat 写入结果目录。 TaskTracker 每 10 秒向 JobT

5、racker 报告一次运行情况,每完成一个 Task10 秒后,就会向 JobTracker 索求下一个 Task。Nutch 项目的全部数据处理都构建在 Hadoop 之上,详见 Scalable Computing with Hadoop。二、程序员编写的代码 (可以查看 hadoop-examples-0.20.203.0.jar,里面也有一个类 grep)我们做一个简单的分布式的 Grep,简单对输入文件进行逐行的正则匹配,如果符合就将该行打印到输出文件。因为是简单的全部输出,所以我们只要写 Mapper 函数,不用写Reducer 函数,也不用定义 Input/Output Form

6、at。java 1.package demo.hadoop 2.public class HadoopGrep 3. public static class RegMapper extends MapReduceBase implements Mapper 4. private Pattern pattern; 5. public void configure(JobConf job) 6. pattern = Ppile(job.get( mapred.mapper.regex ); 7. 8. public void map(WritableComparable key, Writable

7、 value, OutputCollector output, Reporter reporter) 9. throws IOException 10. String text = (Text) value).toString(); 11. Matcher matcher = pattern.matcher(text); 12. if (matcher.find() 13. output.collect(key, value); 14. 15. 16. 17. 18. private HadoopGrep () 19. / singleton 20. 21.public static void

8、 main(String args) throws Exception 22. JobConf grepJob = new JobConf(HadoopGrep. class ); 23. grepJob.setJobName( grep-search ); 24. grepJob.set( mapred.mapper.regex , args 2 ); 25. 26. grepJob.setInputPath( new Path(args 0 ); 27. grepJob.setOutputPath( new Path(args 1 ); 28. grepJob.setMapperClass

9、(RegMapper. class ); 29. grepJob.setReducerClass(IdentityReducer. class ); 30. JobClient.runJob(grepJob); 31. 32. RegMapper 类的 configure()函数接受由 main 函数传入的查找字符串,map() 函数进行正则匹配,key 是行数,value 是文件行的内容,符合的文件行放入中间结果。main()函数定义由命令行参数传入的输入输出目录和匹配字符串,Mapper 函数为RegMapper 类,Reduce 函数是什么都不做,直接把中间结果输出到最终结果的的Iden

10、tityReducer 类,运行 Job。整个代码非常简单,丝毫没有分布式编程的任何细节。本篇文章来源于 Linux 公社网站() 原文链接:http:/ 实例:二度人脉与好友推荐2013-01-05 02:37 intergret intergret 的博客 我要评论(0) 字号:T | T在新浪微博、人人网等社交网站上,为了使用户在网络上认识更多的朋友,社交网站往往提供类似“你可能感兴趣的人”、“间接关注推荐”等好友推荐的功能。一直很好奇这个功能是怎么实现的。AD: 2013 云计算架构师峰会课程资料下载 在新浪微博、人人网等社交网站上,为了使用户在网络上认识更多的朋友,社交网站往往提供类

11、似“你可能感兴趣的人”、“间接关注推荐”等好友推荐的功能。一直很好奇这个功能是怎么实现的。其实,社交网站上的各个用户以及用户之间的相互关注可以抽象为一个图。以下图为例:顶点 A、B、C 到 I 分别是社交网站的用户,两顶点之间的边表示两顶点代表的用户之间相互关注。那么如何根据用户之间相互关注所构成的图,来向每个用户推荐好友呢?可能大家都听说过六度人脉的说法,所谓六度人脉是指:地球上所有的人都可以通过五层以内的熟人链和任何其他人联系起来。通俗地讲:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任何一个陌生人。”这个理论在社交网络中同样成立。现在我们以上图为例

12、,介绍下如何利用用户之间相互关注所构成的图,来向每个用户推荐好友。首先我们不得不假设的是如果两用户之间相互关注,那么我们认为他们认识或者说是现实中的好友,至少应该认识。假设我们现在需要向用户 I 推荐好友,我们发现用户 I 的好友有 H、G、C。其中 H 的好友还有 A,G 的好友还有 F,C 的好友还有 B、F。那么用户 I、H、G、C、A、B、F 极有可能是同一个圈子里的人。我们应该把用户 A、B、F 推荐给用户 I 认识。进一步的想,用户 F 跟两位 I 的好友 C、G 是好友,而用户 A、B 都分别只跟一位 I 的好友是好友,那么相对于 A、B 来说,F 当然更应该推荐给用户 I 认识

13、。可能你会发现,在上面的分析中,我们使用了用户 I 的二度人脉作为他的推荐好友,而且我们对用户 I 的每个二度人脉进行了投票处理,选举出最优推荐。其实,我觉得,二度人脉的结果只能看看某个用户的在社交网站上的人际关系链,而基于投票选举产生的二度人脉才是好友推荐功能中所需要的好友。另外你也可能已经认识到所谓的 N 度人脉,其实就是图算法里面的宽度优先搜索。宽度优先搜索的主要思想是 From Center To Outer,我们以用户 I 为起点,在相互关注所构成的图上往外不退回地走 N 步所能到的顶点,就是用户 I 的 N 度好友。下面是 Python 写的 N 度人脉的算法,可以输出某个用户的

14、N 度好友,代码详见这里。下面几点是其与宽度优先搜索的不同之处:1. 宽度优先搜索搜索的是起始顶点可达的所有顶点,N 度人脉不需要,它只需要向外走 N 步,走到 N 步的顶点处便停止,不需要再往外走了。2. 走过 N 步之后,结果中包含起始顶点往外走 1、2N-1 步所能到达的所有顶点,返回结果之前需将这些点删除。3. 变量 pathLenFromStart 记录这 N 步具体的走法。上诉的算法看似可行,其实在实际中并不适用。社交网站上的用户量至少是千万级别的,不可能把所有用户之间相互关注的关系图放进内存中,这个时候就可以依赖 Hadoop 了。下面的实例中,我们的输入是deg2friend.

15、txt,保存用户之间相互关注的信息。每行有两个用户 ID,以逗号分割,表示这两个用户之间相互关注即认识。二度好友的计算需要两轮的 MapReduce。第一轮 MapReduce 的 Map 中,如果输入是“H,I”,我们的输出是 key=H,value=“H,I”跟 key=I,value=“H,I”两条结果。前者表示 I 可以通过 H 去发现他的二度好友,后者表示 H 可以通过 I 去发现他的二度好友。根据第一轮 MapReduce 的 Map,第一轮 MapReduce 的 Reduce 的输入是例如 key =I,value=“H,I”、“C,I”、“G,I” 。其实 Reduce 的输入是所有与 Key 代表的结点相互关注的人。如果 H、C、G 是与I 相互关注的好友,那么

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号