目录
7.1 概述
7.1.1 分布式并行编程
7.1.2 MapReduce模型简介
7.1.3 Map和Reduce函数
7.2 MapReduce体系结构
Client
JobTracker
TaskTracker
Task
7.1 概述
7.1.1 分布式并行编程
“摩尔定律”, CPU性能大约每隔18个月翻一番。从2005年开始摩尔定律逐渐失效 ,需要处理的数据量快速增加,人们开始借助于分布式并行编程来提高程序性能。分布式程序运行在大规模计算机集群上,可以并行执行大规模数据处理任务,从而获得海量的计算能力。谷歌公司最先提出了分布式并行编程模型MapReduce,Hadoop MapReduce是它的开源实现,后者比前者使用门槛低
7.1.2 MapReduce模型简介
传统并行计算框架 | MapReduce | |
集群架构/容错性 | 共享式(共享内存/共享存储),容错性差 | 非共享式,容错性好 |
硬件/价格/扩展性 | 刀片服务器、高速网、SAN,价格贵,扩展性差 | 普通PC机,便宜,扩展性好 |
编程/学习难度 | what-how,难 | what,简单 |
适用场景 | 实时、细粒度计算、计算密集型 | 批处理、非实时、数据密集型 |
7.1.3 Map和Reduce函数
MapReduce的核心是Map和Reduce函数,程序员只需关心如何实现Map和Reduce函数。Map和Reduce函数都是以<key , value>作为输入,按照一定的规则将其转成另一个或另一批<key,value>进行输出。
函数 | 输入 | 输出 | 说明 |
Map | <k1,v1> 如: <行号,”a b c”> | List(<k2,v2>) 如: <“a”,1> <“b”,1> <“c”,1> | 1.将小数据集进一步解析成一批<key,value>对, 输入Map函数中进行处理 2.每一个输入的<k1,v1>会输出一批<k2,v2>。 <k2,v2>是计算的中间结果 |
Reduce | <k2,List(v2)> 如:<“a”,<1,1,1>> | <k3,v3> 如: <“a”,3> | 输入的中间结果<k2, List(v2)>中的List(v2) 表示是一批属于同一个k2的value |
简单实例
编写一个MapReduce程序来统计一个文本文件中每个单词出现的次数。
(1)<k1,v1>保存的就是<行号,行内容>;
(2)Map函数: <k1,v1>作为输入,实现一系列中间结果<k2,v2>,保存<单词,出现次数>;
(3)Reduce函数:中间结果<k2,v2>作为输入,实现将相同单词的出现次数进行累加,得到每个单词的总次数。
7.2 MapReduce体系结构
在Hadoop中,用于执行MapReduce作业的机器角色有两个:JobTracker和TaskTracker。JobTracker用于调度作业,TaskTracker用于跟踪任务的执行情况。一个Hadoop集群只有一个JobTracker。
MapReduce体系结构主要由四个部分组成,分别是:Client、JobTracker、TaskTracker以及Task