大数据学习记录(day6)-图说Mapreduce工作机制

原创 2017年06月05日 08:32:22

学习来源:http://www.aboutyun.com/thread-5641-1-1.html
http://www.aboutyun.com/thread-5595-1-1.html


一、Mapreduce 整个工作机制图。

图中1:表示待处理数据,比如日志,比如单词计数
图中2:表示map阶段,对他们split,然后送到不同分区
图中3:表示reduce阶段,对这些数据整合处理。
图中4:表示二次mapreduce,这个是mapreduce的链式
二、MapReduce Shuffle和排序
Mapreduce为了确保每个reducer的输入都按键排序。系统执行排序的过程-----将map的输出作为输入传给reducer称为shuffle。学习shuffle是如何工作的有助于我们理解mapreduce工作机制。
shuffle属于hadoop不断被优化和改进的代码库的一部分。从许多方面看,shuffle是mapreduce的“心脏”,是奇迹出现的地方。
下面这张图介绍了mapreduce里shuffle的工作原理:

从图可以看出shuffle发生在map端和reduce端之间,将map端的输出与reduce端的输入对应。
1、map 端
map函数开始产生输出时,并不是简单地将它输出到磁盘。这个过程更复杂,利用缓冲的方式写到内存,并出于效率的考虑进行预排序。shuffle原理图就看出来。
每个map任务都有一个环形内存缓冲区,用于存储任务的输出。默认情况是100MB,可以通过io.sort.mb属性调整。一旦缓冲内容达到阀值(io.sort.spill.percent,默认0.80,或者80%),一个后台线程开始把内容写到磁盘中。在写磁盘过程中,map输出继续被写到缓冲区,但如果在此期间缓冲区被填满,map会阻塞直到写磁盘过程完成。在写磁盘之前,线程首先根据数据最终要传送到reducer把数据划分成相应的分区,在每个分区中,后台线程按键进行内排序,如果有一个combiner,它会在排序后的输出上运行。
reducer通过HTTP方式得到输出文件的分区。用于文件分区的工作线程的数量由任务的tracker.http.threads属性控制,此设置针对每个tasktracker,而不是针对每个map任务槽。默认值是40,在运行大型作业的大型集群上,此值可以根据需要调整。
2、reducer端
map端输出文件位于运行map任务的tasktracker的本地磁盘,现在,tasktracker需要为分区文件运行reduce任务。更进一步,reduce任务需要集群上若干个map任务完成,reduce任务就开始复制其输出。这就是reduce任务的复制阶段。reduce任务有少量复制线程,所以能并行取得map输出。默认值是5个线程,可以通过设置mapred.reduce.parallel.copies属性改变。
在这个过程中我们由于要提到一个问题,reducer如何知道要从那个tasktracker取得map输出呢?
map任务成功完成之后,它们通知其父tasktracker状态已更新,然后tasktracker通知jobtracker。这些通知都是通过心跳机制传输的。因此,对于指定作业,jobtracker知道map输出和tasktracker之间的映射关系。reduce中的一个线程定期询问jobtracker以便获得map输出的位置,直到它获得所有输出位置。
由于reducer可能失败,因此tasktracker并没有在第一个reducer检索到map输出时就立即从磁盘上删除它们。相反,tasktracker会等待,直到jobtracker告知它可以删除map输出,这是作业完成后执行的。
如果map输出相当小,则会被复制到reduce tasktracker的内存(缓冲区大小由mapred.job.shuffle.input.buffer.percent属性控制),否则,map输出被复制到磁盘。一旦内存缓冲区达到阀值大小(由mapred.job.shuffle.merge.percent决定)或达到map输出阀值(mapred.inmem.merge.threshold控制),则合并后溢出写到磁盘中。
随着磁盘上副本的增多,后台线程会将它们合并为更大的、排好序的文件。这会为后面的合并节省一些时间。注意,为了合并,压缩的map输出都必须在内存中被解压缩。
复制完所有map输出被复制期间,reduce任务进入排序阶段(sort phase 更恰当的说法是合并阶段,因为排序是在map端进行的),这个阶段将合并map输出,维持其顺序排序。这是循环进行的。比如,如果有50个map输出,而合并因子是10 (10默认值设置,由io.sort.factor属性设置,与map的合并类似),合并将进行5趟。每趟将10个文件合并成一个文件,因此最后有5个中间文件。
在最后阶段,即reduce阶段,直接把数据输入reduce函数,从而省略了一次磁盘往返行程,并没有将5个文件合并成一个已排序的文件作为最后一趟。最后的合并既可来自内存和磁盘片段。
在reduce阶段,对已排序输出中的每个键都要调用reduce函数。此阶段的输出直接写到输出文件系统中。
小结:
今天通过一张图进一步了解了MapReduce的工作机制,同时学习了将map的输出作为输入传给reducer的Shuffle执行过程。

大数据学习记录(day4)-Hadoop之MapReduce的执行方式

今天学习了MapReduce的三种工作方式,通过代码解析的方式对MapReduce的迭代式、依赖式和链式工作方式做了说明。...

chp6_MapReduce工作机制_20111016

MapReduce工作机制   1.        剖析MapReduce的工作运行机制   2.        失败 Tasktracker失败: 失败检测机制,是通过心跳进行检测。主要...

大数据学习记录(day1)--云计算

前言:博客好久没有更新,也好久没有学习新东西了,从今天开始学习大数据,只要开始,就不算晚。文章内容基本是在网络资料的基础上做些整理(会注明学习来源)。 开始今天的学习。 学习来源:http://www...

大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)

今天先总体说下MapReduce的相关知识,后续将会详细说明对应的shuffle、mr与yarn的联系、以及mr的join操作的等知识。以下内容全是个人学习后的见解,如有遗漏或不足请大家多多指教。1、...

王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第九讲Hadoop图文训练课程:剖析NameNode和Secondary NameNode的工作机制和流程

本讲主要剖析SecondaryNameNode。   “云计算分布式大数据Hadoop实战高手之路”之完整发布目录 云计算分布式大数据实战技术Hadoop交流群:312494188,...
  • twlkyao
  • twlkyao
  • 2013年12月21日 19:01
  • 1295

爬了知乎200万数据,图说程序员都喜欢去哪儿工作~

因为最近和朋友吃饭,大家都到了大三季,都在纠结自己该以哪里作为自己职业发展的起点?也想看看自己的背景,能不能找到靠谱的师哥师姐帮忙,那么师哥师姐都在哪里发光发亮呢? 我当时也是午休的...

MapReduce工作机制参考

  • 2015年11月13日 17:37
  • 22.7MB
  • 下载

爬了知乎 200 万数据,图说程序员都喜欢去哪儿工作

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! 因为最近和朋友吃饭,大家都到了大三季,都在纠结自己该以哪里作为自己职业发展的起点?也想看看自己的背景,能不能找到靠谱的师...

hadoop学习笔记--7.MapReduce的工作机制

一、hadoop MapReduce架构         MapReduce的整个架构如上图所示,同HDFS一样,Hadoop MapReduce也采用了Master/Slave架构,其主要由以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数据学习记录(day6)-图说Mapreduce工作机制
举报原因:
原因补充:

(最多只允许输入30个字)