1、基于Hadoop的Map/Reduce框架研究报告,黄飞,Outline,1. 模型介绍:Hadoop 简介MapReduce 计算模型2.实例分析WordCount,Hadoop 简介,Hadoop 简介,Hadoop 是一个开源分布式计算平台,它实现了 Map/Reduce 计算模型。借助于 Hadoop, 程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的计算。,Hadoop 简介,分布式并行编程概念 基于集群的分布式并行编程能够让软件与数据同时运行在连成一个网络的许多台计算机上,由此获得海量计算能力。,Hadoop 简介,迎接编程方式的变革1.摩尔定律正在失效
2、根据摩尔定律,约每隔18个月,CPU性能会提高一倍。然而,由于晶体管电路已经逐渐接近其物理上的性能极限,摩尔定律在 2005 年左右开始失效。2.分布式并行编程 互联网时代的到来,将使软件编程方式发生重大变革,基于大规模计算机集群的分布式并行编程是将来软件性能提升的主要途径。,Hadoop 简介,1.Google & Hadoop2.Hadoop的未来,Map/Reduce 计算模型,Map/Reduce 计算模型,Map/Reduce 是 Hadoop的核心计算模型,它将复杂的运行于大规模集群上的并行计算过程高度的抽象到了两个函数,Map 和 Reduce, 这是一个令人惊讶的简单却又威力巨
3、大的模型。,Map/Reduce 计算模型,Map/Reduce计算流程,Map/Reduce 计算模型,程序框架:Class MRClass Map Class Reduce main()JobConf conf = new JobConf(“MR.class”);conf.setInputPath(“the_path_of_HDFS ”);conf.setMapperClass(Map.class);conf.setReduceClass(Reduce.class);JobClient.runJob(conf);,Map/Reduce 计算模型,Map 和 Reduce 函数,计算模型的核
4、心是map和reduce 两个函数,这两个函数由用户负责实现,功能是按一定的映射规则将输入的对转换成另一个或一批对输出,Map/Reduce 计算模型,基于 MapReduce 计算模型编写分布式并行程序非常简单,程序员的主要编码工作就是实现 Map 和 Reduce函数。其它的并行编程中的种种复杂问题,如分布式存储,工作调度,负载平衡,容错处理,网络通信等,均由 MapReduce 框架(比如 Hadoop )负责处理。,Map/Reduce 计算模型,并行计算的实现:数据分布存储分布式并行计算本地计算,数据分布存储:,Map/Reduce 计算模型,Map/Reduce 计算模型,分布式并
5、行计算:,Job Tracker,Task Tracker,Task Tracker,Task Tracker,Task,Task,Task,Task,Task,Task,Hadoop Black Box,Map/Reduce 计算模型,本地计算:网络带宽为分布计算瓶颈,“本地计算”是最有效的一种节约网络带宽的手段,业界把这形容为“移动计算比移动数据更经济”。,实例分析:WordCount,实例分析:WordCount,1.实现Map类 这个类实现 Mapper 接口中的 map 方法,输入参数中的 value 是文本文件中的一行,利用StringTokenizer 将这个字符串拆成单词,然后
6、将输出结果 写入到org.apache.hadoop.mapred.OutputCollector 中。,实例分析:WordCount,实例分析:WordCount,Input1, “Hello World Bye World”2, “Hello Hadoop Bye Hadoop”3, “Bye Hadoop Hello Hadoop”,Output.Collecter,Map(K, V) For each word w in V Collect(w, 1);,Map,Map,Map,实例分析:WordCount,Combine(K, V ) Int count = 0; For each
7、v in V count += v; Collect(K, count);,Output.Collecter,Map Output,Combine,Combine,Combine,实例分析:WordCount,Reduce(K, V ) Int count = 0; For each v in V count += v; Collect(K, count);,Internal Grouping,Reduce Output,Reduce,Reduce,Reduce,Reduce,Reduce Input,实例分析:WordCount,2.实现 Reduce 类: 这个类实现 Reducer 接口
8、中的 reduce 方法, 输入参数中的 key, values 是由 Map 任务输出的中间结果,values 是一个 Iterator, 遍历这个 Iterator, 就可以得到属于同一个 key 的所有 value. 此处,key是一个单词,value 是词频。只需要将所有的 value 相加,就可以得到这个单词的总的出现次数。,实例分析:WordCount,实例分析:WordCount,3.运行 Job:在 Hadoop 中一次计算任务称之为一个 job, 可以通过一个 JobConf 对象设置如何运行这个 job。然后将 JobConf 对象作为参数,调用 JobClient 的 runJob, 开始执行这个计算任务。,实例分析:WordCount,实例分析:WordCount,实验结果,Output:Number of occurrences of each word,Input:File containing words,Hello World Bye WorldHello Hadoop Bye HadoopBye Hadoop Hello Hadoop,Bye 3Hadoop 4Hello 3World 2,MapReduce,谢谢陆老师的指导-刘兵兵、陈威同学的帮助-,谢谢,