Mapreduce简介
MapReduce采用的是“
分而治之
”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个从节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单来说,MapReduce就是”任务的分解与结果的汇总
“。
MapReduce定义
MapReduce是Google公司发明的
一种面向大规模海量数据处理的高性能并行计算平台和软件编程框架
,是目前最为成功和最易于使用的大规模海量数据并行处理技术
,广泛应用于搜索引擎(文档倒排索引,网页链接图分析与页面排序等)、Web日志分析、文档分析处理、机器学习、机器翻译等各种大规模数据并行计算应用领域
MapReduce在三个层面上的基本构思
a.如何对付大数据:分而治之
对相互间不具有计算依赖关系的大数据,实行并行最自然的方式就是分而治之。
b.上升到抽象模型:Mapper和Reducer
MPI等并行计算方式缺少高层并行编程模型,为了克服这一缺陷,MapReduce借鉴了Lisp函数式语言中的思想,用Map和Reduce两个函数提供了高层的并行编程抽象模型。
c.上升到构架:统一构架,为程序员隐藏系统细节
MPI等并行计算方法缺少统一的计算框架支持,程序员需要考虑数据存储、划分、分发、结果收集、错误恢复等诸多细节;为此,MapReduce设计并提供了统一的计算框架,为程序员隐藏了绝大多数系统层面的处理细节
MapReduce的工作原理
在分布式计算中,MapReduce框架负责处理了并行编程里分布式存储、工作调度,负载均衡、容错处理以及网络通信等复杂问题,现在我们把处理过程高度抽象为Map与Reduce两个部分来进行阐述,其中Map部分负责把任务分解成多个子任务,Reduce部分负责把分解后多个子任务的处理结果汇总起来
map部分:
map: (k1; v1) [(k2; v2)]
输入:键值对(k1; v1)表示的数据
处理:文档数据记录(如文本文件中的行,或数据表格中的行)将以“键值对”形式传入map函数;map函数将处理这些键值对,并以另一种键值对形式输出处理的一组键值对中间结果[(k2; v2)]
输出:键值对[(k2; v2)]表示的一组中间数据
reduce部分:
reduce: (k2; [v2]) [(k3; v3)]
输入: 由map输出的一组键值对[(k2; v2)] 将被进行合并处理将同样主键下的不同数值合并到一个列表[v2]中,故reduce的输入为(k2; [v2])
处理:对传入的中间结果列表数据进行某种整理或进一步的处理,并产生最终的某种形式的结果输出[(k3; v3)] 。
输出:最终输出结果[(k3; v3)]
WordCount
实验环境
Linux Ubuntu 14.0
jdk-7u75-linux-x64
hadoop-2.6.0-cdh5.4.5
hadoop-2.6.0-eclipse-cdh5.4.5.jar
eclipse-java-juno-SR2-linux-gtk-x86_64
实验步骤
1.切换目录到/apps/hadoop/sbin下,启动hadoop。
cd /apps/hadoop/sbin
./start-