`
yuanjin
  • 浏览: 4967 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转载】mapreduce编程模型

阅读更多
 

阅读本文可以带着下面问题
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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics