图文详解MapReduce工作机制

job提交阶段
1、准备好待处理文本。
2、客户端submit()前,获取待处理数据的信息,然后根据参数配置,形成一个任务分配的规划。
3、客户端向Yarn请求创建MrAppMaster并提交切片等相关信息:job.split、wc.jar、job.xml。Yarn调用ResourceManager来创建MrAppMaster,而MrAppMaster则会根据切片的个数来创建MapTask。
其中切片规划: InputFormat(默认为TextInputFormat)通过getSplits 方法对输入目录中的文件进行逻辑切片,并序列化成job.split文件。默认情况下,HDFS上的一个block对应一个InputSplit,一个InputSplit对应开启一个MapTask。
MapTask阶段
1、Read阶段:由RecordReader对象(默认是LineRecordReader)进行读取,以换行符 (\n) 作为分隔符,每读取一行数据,就返回一对<Key,Value>供Mapper使用。Key表示该行的起始字节偏移量,Reduce表示这一行的内容。
2、Map阶段: 将解析出的<Key,Value>交给用户重写的map()函数处理,每一行数据会调用一次map()函数。
3、Collect阶段:map()函数中将数据处理完成后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会将生成的key/value进行分区处理(调用Partitioner,默认为HashPartitioner),并写入一个环形内存缓冲区中。
4、Spill阶段(溢写):当环形缓冲区的数据达到溢写比例时(80%),会将数据溢写到本地磁盘上,生成一个临时文件。溢写之前,还会对数据进行排序,必要时进行合并、压缩操作。
5、Merge阶段:当Mapper输出全部文件后,产生多个临时文件。MapTask将所有临时文件以分区为单位,进行归并排序,最终得到一个大文件,等待Reduce端的拉取。
ReduceTask阶段
1、Copy阶段:每个ReduceTask从各个MapTask上拉取对应分区的数据。拉取数据后先存储到内存中,内存不够时,再刷写到磁盘。
2、Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
3、Sort阶段:用户编写的reduce()函数的输入数据是按Key进行聚集的一组数据。为了将相同Key的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经对自己的处理结果进行了分区内局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。
4、Reduce阶段:相同Key的一组键值对调用一次Reduce方法,进行聚合处理。之后通过context.write,默认以TextOutputFormat格式经RecordWriter写入到HDFS文件中。
溢写阶段详情

1、每个 MapTask都有一个环形内存缓冲区(默认大小为100M)用于批量收集Mapper结果,以减少磁盘IO的开销。当缓冲区的数据达到溢写比例时(默认为80%),溢写线程启动。此时MapTask仍继续将结果写入缓冲区,如果缓冲区被写满,MapTask就会阻塞直到溢出线程结束。如果数据量很小,达不到80M溢写的话,就等所有文件都读完后完成一次溢写。
2、在溢写之前,会采取快速排序算法对缓冲区内的数据按照Key进行字典顺序排序:先把数据划分到相应的分区(Partition),然后按照key进行排序。经过排序后,相同分区的数据聚集在一起,同一分区内的数据按照key有序。
3、如果设置了Combiner 函数,则在排序后,溢写前对每个分区中的数据进行局部聚合操作,以减轻 Shuffle 过程中网络传输压力。
4、开始溢写:按照分区编号由小到大依次将每个分区中的数据写入任务工作目录下的临时文件output/spillN.out(N表示当前溢写次数)中。每次内存缓冲区达到溢出阈值,就会新建一个溢出文件(spill file),当Mapper输出全部文件时,会产生多个溢写文件,最终会被合并成一个已分区且已排序的输出文件。
图文详解MapReduce工作机制的更多相关文章
- MapReduce工作原理图文详解 (炼数成金)
MapReduce工作原理图文详解 1.Map-Reduce 工作机制剖析图: 1.首先,第一步,我们先编写好我们的map-reduce程序,然后在一个client 节点里面进行提交.(一般来说可以在 ...
- Android 异步通信:图文详解Handler机制工作原理
前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将图文详解 Handler机制 的工作原理,希望你们会喜欢 目录 1. 定义 一套 Android 消息传递机制 2. ...
- MapReduce 1工作原理图文详解
MapReduce工作原理图文详解 一 MapReduce程序执行流程 程序执行流程图如下: 流程分析:1.在客户端启动一个作业.2.向JobTracker请求一个Job ID.3.将运行作业所需要的 ...
- Hadoop MapReduce 一文详解MapReduce及工作机制
@ 目录 前言-MR概述 1.Hadoop MapReduce设计思想及优缺点 设计思想 优点: 缺点: 2. Hadoop MapReduce核心思想 3.MapReduce工作机制 剖析MapRe ...
- 图文详解 Android Binder跨进程通信机制 原理
图文详解 Android Binder跨进程通信机制 原理 目录 目录 1. Binder到底是什么? 中文即 粘合剂,意思为粘合了两个不同的进程 网上有很多对Binder的定义,但都说不清楚:Bin ...
- 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)
上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- Linux NFS服务器的安装与配置方法(图文详解)
这篇文章主要介绍了Linux NFS服务器的安装与配置方法(图文详解),需要的朋友可以参考下(http://xb.xcjl0834.com) 一.NFS服务简介 NFS 是Network File S ...
- APNS推送服务证书制作 图文详解教程(新)
iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...
随机推荐
- 正则、字符类Pattern、Matcher类
字符类 * [abc] a.b 或 c(简单类) * [^abc] 任何字符,除了 a.b 或 c(否定) * [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) * [0-9 ...
- js 生成 pdf 文件
话不多说好吧, 直接上demo图: 直接上代码好吧:(要引入的两个js 链接我放最后) <!DOCTYPE html> <html> <head> <met ...
- 学生管理系统 C++课设
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> u ...
- 2021年Java后端技术知识体系
-----2021/1/22
- c语言实现循环单链表
//初始化 Node*InitList() { Node*head=(Node*)malloc(sizeof(Node)); head->next=NULL; head->data=-1; ...
- nginx配置后端映射(反向代理proxy_pass)
说明:配置反向代理proxy_pass和location无关,location后面加不加 / 都可以 1.配置 proxy_pass 时,当在后面的 url 加上了 /,相当于是绝对路径,则 Ngin ...
- FFMPEG第一次学习
习惯用OneNote笔记,直接复制了,链接和一些命令放在最下面了 里面的库文件是我下的雷神的课件文件,我传到了自己github,链接也放最后了 转载自:https://blog.csdn.net/le ...
- 一篇文章带你搞懂InnoDB的索引|结合样例
关注公众号[程序员白泽],带你走进一个不一样的程序员/学生党 前言 前阵子面试的时候,在第三面问到了MySQL索引相关的知识点,并且给出了一些SQL语句分析索引的执行情况.所以今天这篇文章给大家讲讲索 ...
- optimoptions requires Optimization Toolbox(optimoptions 需要 Optimization Toolbox)解决方法
问题:在下载版的matlab中做coursera的machine learning里的ex2,做到 1.2.3 Learning parameters using fminunc 时出现optimop ...
- 代码源 BFS练习1
BFS练习1 http://oj.daimayuan.top/course/11/problem/147 题目 思路 四个方向进行BFS 注意:此题读写量大,cin会被卡 代码 #include &l ...