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