mr执行过程及运行原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mr执行过程及运行原理相关的知识,希望对你有一定的参考价值。

参考技术A split逻辑切分:

这里的分片不是物理分片,输入分片存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数据

例如10MB文件,切分10各1MB小文件,0-1MB位置定义为第一个切片,1MB-2MB定义为第二个分片

map阶段(每个分片对应一个map task)

每个mapper任务都是一个java进程,它读取hdfs文件中自己对应的输入分片,将分片中记录按照一定规则调用map函数解析成键值对,如<word,1>,<word,1>形式,如果有100个键值对,就调用100次map方法

键:每一行的起始位置            值:本行的文本内容

map shuffle阶段、洗牌阶段,分区partition,排序sort,combine(本地reducer),合并

map方法输出的数据,进入到内存缓冲区,缓冲区满了后,启动线程写磁盘,在启动线程写磁盘之前,对数据进行key的hash分区,对每个分区进行key值排序,设置了combiner,则对排序的数据做简单的合并重复key值操作,如<word,2>,写磁盘操作会产生多个文件,当map写完磁盘后则对文件进行一次合并,确保一个map task最终只生成一个数据文件

reduce shuffle阶段:copy、merge、reduce

map方法输出完成后,reduce线程会启动copy线程,请求所有map task的输出结果,如果reduce端接收的数据量小,则直接存内存中,数据量超过内存,则数据数据合并后写磁盘,在写磁盘过程中会把这些文件合并成一个更大的有序文件,最后一次合并的结果没有写磁盘,直接输入给reduce函数中

对copy过来的数据先放入内存缓冲区中,如果是数据量超过缓冲区大小,则对数据合并后写磁盘,如果设置combiner,combiner也可以这个时候做合并,如果map task1中的<word,1>,map task2中的<word,2>,那么combiner之后则为<word,1,2>

调用reduce函数

reduce阶段分组好的<word,1,2>,调用reduce函数进行聚合<word,3>,将结果输出到hdfs,每个reduce进程会对应一个输出文件,名称以part-开头

词频统计mr过程:

split:由于输入文件太大,mapreduce会对其进行分割,大文件会被切分成多份

map:解析出每一行中的每个单词,并在后面记上数字1,表示此单词出现过1次

shuffle:将每一份中相同的单词分组到一起,并按默认字母顺序进行升序排序

reduce:将每一组中的单词出现的次数进行累加求和

以上复杂的运行过程,用一张图来简单说明,方便理解和记忆,如下图所示:

文章阅读:计算机体系-计算机将代码编译和持续运行过程中需要考虑的问题,以及具体的实现原理讲解


文章太棒,我无法理解和评价,备份一下。

注:讲了什么是函数,什么是数据。太抽象了,不过看了之后有很深的感触,还有不懂的感触。


注:一直写代码,却不了解代码到底是怎么被编译的...






其他:
这个博客有好多文章,对目前的我来说都比较高深。后续有机会全部过一遍。
至少还有10篇文章没看。


以上是关于mr执行过程及运行原理的主要内容,如果未能解决你的问题,请参考以下文章

MapReduce的原理及执行过程

[Hadoop]浅谈MapReduce原理及执行流程

yarn的原理及MR在yarn上的执行

MR原理

简单搞定Shuffle机制运行原理

文章阅读:计算机体系-计算机将代码编译和持续运行过程中需要考虑的问题,以及具体的实现原理讲解