MapReduce原理浅析
-------------------------每天学习一点点^_^-------------------------- 一个简单的应用了Map/Reduce模式的例子:http://wiki.apache.org/hadoop/WordCount
用 Mapeduce 来处理大数据集的过程, 这个 MapReduce 的计算过程简而言之,就是将大数据集分解为成百上千的小数据集,每个(或若干个)数据集分别由集群中的一个结点(一般就是一台普通的计算机)进行处理并生成中间结果,然后这些中间结果又由大量的结点进行合并, 形成最终结果。
计算模型的核心是 Map 和 Reduce 两个函数,这两个函数由用户负责实现,功能是按一定的映射规则将输入的 <key, value> 对转换成另一个或一批 <key, value> 对输出。
<k1, v1> | List(<k2,v2>) |
1. 将小数据集进一步解析成一批 <key,value> 对,输入 Map 函数中进行处理。 2. 每一个输入的 <k1,v1> 会输出一批 <k2,v2>。 <k2,v2> 是计算的中间结果。 |
<k2,List(v2)> | <k3,v3> | 输入的中间结果 <k2,List(v2)> 中的 List(v2) 表示是一批属于同一个 k2 的 value |
基于 MapReduce 计算模型编写分布式并行程序非常简单,程序员的主要编码工作就是实现 Map 和 Reduce 函数,其它的并行编程中的种种复杂问题,如分布式存储,工作调度,负载平衡,容错处理,网络通信等,均由 MapReduce 框架(比如 Hadoop )负责处理,程序员完全不用操心。
数据存储在哪一台计算机上,就由这台计算机进行这部分数据的计算,这样可以减少数据在网络上的传输,降低对网络带宽的需求。在 Hadoop 这样的基于集群的分布式并行系统中,计算结点可以很方便地扩充,而因它所能够提供的计算能力近乎是无限的,但是由是数据需要在不同的计算机之间流动,故网络带宽变成了瓶颈,是非常宝贵的,“本地计算”是最有效的一种节约网络带宽的手段,业界把这形容为“移动计算比移动数据更经济”。
把原始大数据集切割成小数据集时,通常让小数据集小于或等于 HDFS 中一个 Block 的大小(缺省是 64M),这样能够保证一个小数据集位于一台计算机上,便于本地计算。有 M 个小数据集待处理,就启动 M 个 Map 任务,注意这 M 个 Map 任务分布于 N 台计算机上并行运行,Reduce 任务的数量 R 则可由用户指定。
把 Map 任务输出的中间结果按 key 的范围划分成 R 份( R 是预先定义的 Reduce 任务的个数),划分时通常使用 hash 函数,如: hash(key) mod R,这样可以保证某一段范围内的 key,一定是由一个 Reduce 任务来处理,可以简化 Reduce 的过程。
在 partition 之前,还可以对中间结果先做 combine,即将中间结果中有相同 key的 <key, value> 对合并成一对。combine 的过程与 Reduce 的过程类似,很多情况下就可以直接使用 Reduce 函数,但 combine 是作为 Map 任务的一部分,在执行完 Map 函数后紧接着执行的。Combine 能够减少中间结果中 <key, value> 对的数目,从而减少网络流量。
Map 任务的中间结果在做完 Combine 和 Partition 之后,以文件形式存于本地磁盘。中间结果文件的位置会通知主控 JobTracker, JobTracker 再通知 Reduce 任务到哪一个 DataNode 上去取中间结果。注意所有的 Map 任务产生中间结果均按其 Key 用同一个 Hash 函数划分成了 R 份,R 个 Reduce 任务各自负责一段 Key 区间。每个 Reduce 需要向许多个 Map 任务结点取得落在其负责的 Key 区间内的中间结果,然后执行 Reduce 函数,形成一个最终的结果文件。
有 R 个 Reduce 任务,就会有 R 个最终结果,很多情况下这 R 个最终结果并不需要合并成一个最终结果。因为这 R 个最终结果又可以做为另一个计算任务的输入,开始另一个并行计算任务。
转自 http://blog.renren.com/share/54540850/7885893793
相关推荐
本文将深入浅出地解析MapReduce的工作原理,帮助读者理解这一强大的大数据处理模型。 MapReduce是由Google在2004年提出的一种并行计算模型,其设计灵感来源于函数式编程中的映射(map)和归并(reduce)操作。...
Hadoop HDFS和MapReduce架构浅析.pdf 更多资源请点击:https://blog.csdn.net/weixin_44155966
### MapReduce原理详解 #### 一、MapReduce与Hadoop概述 MapReduce是Apache Hadoop项目的核心组件之一,主要用于处理大规模数据集的分布式计算。它不仅是一种编程模型,还是一套支持这种模型的软件框架。MapReduce...
### Hadoop+HDFS和MapReduce架构浅析 #### 摘要 本文旨在深入剖析Hadoop中的两大核心组件——HDFS(Hadoop Distributed File System)和MapReduce的工作原理及其实现机制。首先,我们将介绍Hadoop NameNode与...
MapReduce 原理 MapReduce 的定义和架构 MapReduce 是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的式并行处理上 T 级别的数据集。 MapReduce...
Hadoop介绍,HDFS和MapReduce工作原理
MapReduce编程实例浅析,讲述如何进行M/R程序开发。
Hadoop作为一个开源的分布式存储与计算框架,在处理大数据方面表现出色,其核心组件HDFS和MapReduce对于理解和运用Hadoop至关重要。 首先,Hadoop的HDFS(Hadoop Distributed File System)是一种高度容错性的系统...
分布式处理系统,适合集群式处理。提高运行效率以及容错率
### MapReduce原理详解 #### 一、MapReduce概述 ##### 1、基本概念 MapReduce是Hadoop的核心组件之一,它提供了一种分布式计算的方案,适用于大规模数据集的并行处理。MapReduce不仅是一种编程模型,也是一种计算...
详细介绍 Hadoop 家族中的 MapReduce 原理 MapReduce 是 Hadoop 家族中的核心组件之一,是一个分布式运算程序的编程框架。MapReduce 的核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式...
深入 剖析 了 Hadoop ... 书中 不仅 详细 介绍 了 MapReduce 各个 组件 的 内部 实现 原理, 而且 结合 源 代码 进行 了 深入 的 剖析, 使 读者 可以 快速 全面 地 掌握 Hadoop MapReduce 设计 原理 和 实现 细节。
【大纲】MapReduce概述及原理InputFormatOutputFormatMapReduce切片解析MapReduce的shuffle原理MapReduce的序列化MapReduce的优化
深入理解MapReduce架构设计与实现原理.详细。入门和深入推荐
**MapReduce的基本原理** MapReduce模型主要由两个关键阶段组成:Map和Reduce。 1. **Map阶段**:这个阶段将原始输入数据分割成多个小块(split),每个split由一个独立的Map任务处理。Map函数接收键值对(k1, v1)...
大数据管理与监控:Ambari:MapReduce原理与实践.docx