您现在的位置 >> Hadoop教程 >> Hadoop实战 >> 专题  
 

mapreduce编程模型

【作者:Hadoop实战专家】【关键词:集群 数据 】 【点击:31300次】【2013-10-2】
这样,开发人员就可以利用MapReduce编程框架,开发分布式应用程序,运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。当然很多情况下Reduce执行时需要跨节点去拉取其它节点上的map task结果。减少磁盘IO对task执行的影响。  

相关热门搜索:storm集群安装 hadoop集群 第8期 集群

大数据标签:hadoop hdfs mapreduce bigdata

阅读本文可以带着下面问题
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将Input 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执行的影响。

大数据系列相关文章:

最新评论
小偉2014-09-10 06:20:27
s.length.toString.length 后面这个没看懂啊,求解啊大神
郑旭进2014-09-10 04:14:52
[图片]
ltguo2014-09-09 02:40:57
哈..哈哈........hadoop的程序完全不知道怎么debug................感觉可以不用看决赛了...眼泪哗哗..................
CC2014-09-08 09:55:43
#求助#我遇到了问题,谁来帮帮我:hadoop用java写map(),reduce()方法,如何在reduce()中加载一个本地文件?【来自百度知道】http://t.cn/8sZaPaa
追寻的梦2014-09-08 04:51:51
append这个是导入的时候用的吧 导出可以用吗?
炎辰ly2014-09-08 12:32:25
[图片]
WANdisco2014-09-07 11:31:38
没有办法,我招的那个妹子,下个月9号来上班,我让她加这个群,你们调戏吧
hey hello2014-09-07 12:48:33
发表了博文《(原)在浏览器点击Browsethefilesystem提示地址无效》问题:hadoop安装之后在浏览器点击Browsethefilesystem提示地址无效。分析:网上写的比较好的解决方RPXaLJM
追风少年2014-09-07 08:20:59
有人用hadoop做数据分析吗???——数据分析不使用Hadoop的五大理由_中国统计网(iTongji.CN) http://t.cn/8sgQkYl
非诚忽扰2014-09-06 01:14:14
What Is Hadoop, Hadoop Key Features, How Hadoop Works, Why Hadoop http://t.cn/8Fk2GiI
 
  • Hadoop生态系统资料推荐