阅读本文可以带着下面问题 1.reduce数量由谁来决定? 2.运行作业的工具由哪些? 更多问题等待你挖掘
MapReduce的设计目标是方便编程人员在不熟悉分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(化简)函数,用来保证所有映射的键值对中的每一个共享相同的键组。MapReduce编程现在基本已经成为分布式并行编程框架的Bible,很多分布式计算引擎的实现[Hadoop][CIEL][Twister][Transformer][MR-mpi][Phoenix][Dryad]都将MapReduce编程作为一个核心的编程模型。
MapReduce编程模型组件:Mapper,Reducer
Mapping:MapReduce将Input List作为Mapping函数的输入参数,经过处理,把结果返回给Output List。举例来说,有一个函数toUpper(str),用来返回输入字符串的大写版本。那么这里的Input List指的是转换前的常规字符串列表,Mapping Function指的是toUpper函数,而Output List指的是转换后的大写字符串列表。值得注意的是,在这里Mapping并没有改变输入字符串列表,而是返回一个新的字符串列表。
Reducing:MapReduce将Output List作为Reducing函数的输入参数,经过迭代处理,把这些数据汇集,返回一个输出值给Output Value。从这个意义上来说,Reducing一般用来生成”总结“数据,把大规模的数据转变成更小的总结数据。例如,"+"可以用来作一个reducing函数,去返回输入数据列表的值的总和。
从工作流程来讲,MapReduce对应的作业Job首先把输入的数据集切分为若干独立的数据块,并由Map组件以Task的方式并行处理。处理结果经过排序后,依次输入给Reduce组件,并且以Task的形式并行处理。MapReduce对应的输入输出数据由HDFS的DataNode存储。MapReduce对应的Job部署在Master服务器,由Master JobTracker负责Task的调度,监控,重新执行失败的任务等等。MapReduce对应的Job部署在若干不同的Slave服务器,每个集群节点含一个slave TaskTracker,负责执行由master指派的任务。
Hadoop框架由Java实现的,它提供了两种主要工具。
Hadoop Streaming是一种运行作业的实用工具,它允许用户创建和运行任何可执行程序(例如:Shell工具)来做为mapper和reducer。Hadoop Pipes是一个与SWIG兼容的C++ API (没有基于JNITM技术),它也可用于实现Map/Reduce应用程序。这样,开发人员就可以利用MapReduce编程框架,开发分布式应用程序,运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。
MapReduce过程关键点 1)Map阶段的数据本地性的考虑。 2)Map中间结果的归并,由多个Spill文件归并成一个大文件。 3)Reduce拷贝数据的过程
MapReduce核心:Shuffle过程 要想理解MapReduce编程, Shuffle是必须要了解的。 Shuffle的正常意思是洗牌或弄乱,可能大家更熟悉的是Java API里的Collections.shuffle(List)方法,它会随机地打乱参数list里的元素顺序。
在Hadoop这样的集群环境中,大部分map task与reduce task的执行是在不同的节点上。当然很多情况下Reduce执行时需要跨节点去拉取其它节点上的map task结果。如果集群正在运行的job有很多,那么task的正常执行对集群内部的网络资源消耗会很严重。这种网络消耗是正常的,我们不能限制,能做的就是最大化地减少不必要的消耗。还有在节点内,相比于内存,磁盘IO对job完成时间的影响也是可观的。从最基本的要求来说,我们对Shuffle过程的期望可以有:
完整地从map task端拉取数据到reduce 端。 在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。 减少磁盘IO对task执行的影响。
原帖地址:http://www.aboutyun.com/thread-7039-1-1.html
|
相关推荐
### MapReduce 编程模型详解 #### 一、引言:MapReduce——大规模数据处理的革新者 在当今数字化时代,大数据的处理已成为各行业关注的焦点。随着互联网的飞速发展,数据量呈指数级增长,传统的数据处理方法已无法...
### MapReduce编程模型详解 #### 一、MapReduce概述与问题背景 MapReduce是一种由Google提出的编程模型,用于处理大规模数据集(通常是TB甚至PB级别的数据)。它通过将大规模的数据处理任务分解为可以在大量普通...
Hadoop MapReduce 编程实战 ...通过了解 MapReduce 编程基础、MapReduce 项目实践、MapReduce 编程模型、Deduplication、MAC 地址统计和计数器的使用,我们可以更好地掌握 Hadoop MapReduce 的编程技术。
大数据及MapReduce编程模型94.pptx
实验项目“MapReduce 编程”旨在让学生深入理解并熟练运用MapReduce编程模型,这是大数据处理领域中的核心技术之一。实验内容涵盖了从启动全分布模式的Hadoop集群到编写、运行和分析MapReduce应用程序的全过程。 ...
在大数据处理领域,MapReduce是一种广泛使用的编程模型,尤其适合处理和存储大规模数据集。本话题将深入探讨如何使用Hadoop MapReduce实现两个矩阵相乘的算法,这在数据分析、机器学习以及高性能计算中有着重要应用...
MapReduce是一种编程模型,用于处理大规模数据,通过将计算任务分配到多个节点上,从而实现数据处理的并行化。 实验目的: 1. 通过实验掌握基本的MapReduce编程方法。 2. 掌握用MapReduce解决一些常见的数据处理...
本文针对上述问题,提出了一种新的离群数据挖掘方法,其核心思想是利用MapReduce编程模型,结合上下文信息来提高挖掘结果的可理解性和可解释性。 首先,文章提出的相关子空间法(Correlation Subspace Method)是一...
复杂的MapReduce模型通常涉及多轮Map和Reduce操作,或者在Map和Reduce之间增加额外的阶段,如Combiner或Partitioner。Combiner可以在Mapper本地进行早期的聚合,减少网络传输的数据量;Partitioner可以控制数据的...
MapReduce是一种编程模型,用于处理大规模数据集,主要应用于Hadoop分布式计算框架中。MapReduce编程模型由两个主要阶段组成:Map阶段和Reduce阶段。Map阶段负责将输入数据分解成小的数据块,然后将其传递给Reduce...
在MapReduce编程模型中,数据的本地化是非常重要的优化策略。Hadoop尝试将数据分配给存储这些数据的节点上的map任务,以减少网络传输的开销。此外,MapReduce还支持Combiner函数,这是一种特殊的reduce函数,可以在...
03.mapreduce编程模型和具体实现框架之间的概念关系.mp4
一个自己写的Hadoop MapReduce实例源码,网上看到不少网友在学习MapReduce编程,但是除了wordcount范例外实例比较少,故上传自己的一个。包含完整实例源码,编译配置文件,测试数据,可执行jar文件,执行脚本及操作...
MapReduce是一种编程模型,由Google提出,用于处理大量数据。它主要用于分布式计算,通过map和reduce两个阶段,对大规模数据进行处理和分析。 实验目的 通过这个实验,学生可以掌握基本的MapReduce编程方法,并...
01.mapreduce编程模型--及hadoop中的具体实现框架--复习.mp4
### 大数据实验四-MapReduce编程实践 #### 一、实验内容与目的 ##### 实验内容概述 本次实验的主要内容是使用MapReduce框架来实现WordCount词频统计功能,即统计HDFS(Hadoop Distributed File System)系统中多个...