【大数据之Hadoop】十九、MapReduce总结

news2024/11/24 12:12:04

MapTask工作机制

在这里插入图片描述
(1)Read阶段:
job的提交流程:待读写的源数据由客户端进行切片划分,划分完成之后提交(切片信息、jar包、xml配置文件)给yarn,yarn开启MrAppMaster,MrAppMaster读取切片信息,根据切片个数决定开启MapTask的个数。

MrAppMaster启动后正式开启MapTask,由InputFormat读取数据(默认使用TextInputFormat)调用RecorderReader的reader()读取数据,数据格式:(k,v)=(偏移量,数据的一行内容)。

读取之后将数据返回给Mapper,进入Map阶段。

(2)Map阶段:
主要是将解析出的key/value交给用户编写map()函数处理,并产生一系列新的key/value。

(3)Collect收集阶段
在用户编写map()函数中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果(即环形缓冲区)。

在该函数内部,它会将生成的key/value分区(调用Partitioner),并写入一个环形内存缓冲区中。

缓冲区内部的数据全部都是按照分区的方式进行存储,当数据进入到环形缓冲区时就进行分区标记(会根据分区进入到不同的reduce),缓冲区一侧存数据,一侧存索引,当数据达到80%时进行反向溢写。溢写之前需要对分区中的数据进行排序(对索引使用快速排序)

达到80%时进行反向溢写的原因:若数据达到100%时进行溢写,则需要等待数据溢写到磁盘才能继续写入环形缓冲区,导致效率低;当达到80%时进行反向溢写,此时开启一个线程进行溢写,保证正常运行。

(4)Spill溢写阶段:
当环形缓冲区满后,产生大量的溢写文件,MapReduce会将数据写到本地磁盘上,生成一个临时文件。
将数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。

(5)Merge阶段:
当所有数据处理完成后(即溢写完成后),MapTask所有临时文件(溢写文件)进行一次归并排序,以确保最终只会生成一个数据文件,存储在磁盘上。

ReduceTask工作机制

在这里插入图片描述
前提:MapTask将数据处理完毕且持久化在磁盘上,等待ReduceTask端拉取数据。
当所以的MapTask完成之后启动相应数量的ReduceTask,并告知ReduceTask数据分区开hi工作。并不是等所有的MapTask完成之后才开启ReduceTask。

(1)Copy阶段:
ReduceTask从各个MapTask上远程拷贝一片数据(即拉取指定分区的数据),并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。

(2)Sort阶段:
对拉取的文件进行归并排序。相同的key的键值对进入到reduce()方法,排序有助于提高效率。

在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。

(3)Reduce阶段:
对于相同的key的数据进入到同一个reduce()处理函数,将计算结果**通过OutputFormat(输出)**的RecordWriter写到HDFS上。

MapReduce工作流程

在这里插入图片描述
在这里插入图片描述
1、输入数据接口:InputFormat
(1)默认使用的实现类是:TextInputFormat
(2)TextInputFormat的功能逻辑是:一次读一行文本,然后将该行的起始偏移量作为key,行内容作为value返回。
(3)CombineTextInputFormat可以把多个小文件合并成一个切片处理,提高处理效率。

2、逻辑处理接口:Mapper
用户根据业务需求实现其中三个方法:初始化setup()、用户的业务逻辑map()、关闭资源cleanup () 。

3、Partitioner分区
(1)有默认实现 HashPartitioner,逻辑是根据key的哈希值和numReduces来返回一个分区号;key.hashCode()&Integer.MAXVALUE % numReduces
(2)如果业务上有特别的需求,可以自定义分区。

4、Comparable排序
(1)当我们用自定义的对象作为key来输出时,就必须要实现WritableComparable接口,重写其中的compareTo()方法。
(2)部分排序:对最终输出的每一个文件进行内部排序。
(3)全排序:对所有数据进行排序,通常只有一个Reduce。
(4)二次排序:排序的条件有两个,自定义排序,实现writableCompare接口,重写compareTo方法。

5、Combiner合并
Combiner合并可以提高程序执行效率,减少IO传输。但是使用时必须不能影响原有的业务处理结果,进行提前聚合map,这是解决数据倾斜的一种方法。

6、逻辑处理接口:Reducer
用户根据业务需求实现其中三个方法:初始化setup()、用户的业务逻辑reduce()、关闭资源cleanup () 。

7、输出数据接口:OutputFormat
(1)默认实现类是TextOutputFormat,功能逻辑是:将每一个KV对,向目标文本文件输出一行。
(2)用户还可以自定义OutputFormat。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[BJDCTF2020CTF]之Misc篇(NSSCTF)刷题记录③

CTFHub-Misc篇刷题记录①wp SUCTF-2019-MISC签到题2021-安徽省赛-misc签到RCTF-2019-Misc-draw2020-BJDCTF-Misc-藏藏藏2020-BJDCTF-Misc-签个到2020-BJDCTF-Misc-认真你就输了2020-BJDCTF-Misc-你猜我是个啥2020-BJDCTF-Misc-一叶障目2020-BJDCTF-Misc-鸡你太美2020-BJDCTF-Mi…

2023-04-24 FastDFS使用

FastDFS 1.介绍 ​ 文件上传后先是发送到tomcat应用目录下,通过shell脚本(定时执行命令)将某个目录下的文件复制到一个不会被清理的固定目录中 FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性…

DNS内外网解析

AppSrv 为 chinaskills.cn 域提供域名解析; ~ 为 www.chinaskills.cn、download.chinaskills.cn 和 mail.chinaskills.cn 提供解析; ~ 启用内外网解析功能,当内网客户端请求解析的时候,解析到对应的 内部服务器地址&#x…

Windows 服务器怎么修改密码和用户名?服务器修改密码需要重启吗?

Windows 服务器怎么修改密码和用户名?服务器修改密码需要重启吗? 方法一:服务器管理器Windows Server 2003、2008Windows server 2012 方法二:命令提示符(Windows系统通用) 在服务器使用期间,为…

【14】SCI易中期刊推荐——计算机 | 人工智能(中科院2区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

rust教程 第二章 —— rust基础语法详解

文章目录 前言一、变量二、数据类型1.标量2.复合类型 三、函数四、注释五、控制流总结 前言 本系列教程目录可查看这篇文章&#xff1a;Rust教程目录 一、变量 首先要讲解的便是变量&#xff0c;如果你有其它语言基础&#xff0c;相信还是比较好理解的 我们的电脑中&#x…

PHP的性能优化方法总结

一.什么情况之下&#xff0c;会遇到PHP性能问题&#xff1f; PHP语法使用不恰当使用PHP语言做了它不擅长的事情使用PHP语言连接的服务不给力PHP自身的短板&#xff08;PHP自身做不了的事情&#xff09;我们也不知道的问题&#xff1f;&#xff08;去探索、分析找到解决办法&am…

用友BIP全球司库与交易银行大会圆满落幕

4月20日&#xff0c;用友全球司库与交易银行大会顺利召开。此次大会&#xff0c;用友以700万客户为依托&#xff0c;以最新BIP技术平台为纽带&#xff0c;面向银行生态&#xff0c;对市场、业务、产品领域进行全面开放合作。来自中国建设银行、中国交通银行、工商银行、中信银行…

C++重载,缺省参数,引用

目录 重载 参数的缺省 引用 引用总结&#xff1a; 重载 什么是函数的重载呢,在以前学C语言的时候都写过一个Max1的函数,目的就是求出两个数或者多个数的较大值,但它的参数很单一,只能接受一种参数,如果在已有int类型下还需要写一个double类型的Max函数就需要重新命令成Max2,…

SNMP Trap的session问题

1、前言 最近遇到了个问题&#xff0c;SNMPv3 Trap上报&#xff0c;在snmp agent侧修改了用户密码&#xff0c;管理站mibbroswer上没有修改trap用户的密码&#xff0c;仍然可接收到trap上报消息。通过Wireshark抓包&#xff0c;&#xff08;编辑–首选项–Protocols–SNMP–Us…

证照之星7.0下载安装教程及老版本升级说明

随着社会的发展&#xff0c;人们的证件照需求越来越多&#xff0c;很多人为了节省时间和成本&#xff0c;选择自己拍摄证件照&#xff0c;并进行后期制作。而证照之星是一款功能强大的证件照后期制作软件&#xff0c;能够帮助用户对证件照进行快速美化和处理。本文将为大家详细…

【SpringBoot】自从集成spring-security-oauth2后,实现统一认证授权so easy!

文章目录 一.前言1.principal和credential的区别2.生成私钥公钥3.用户认证分析4.认证解决方案4.1.单点登录4.2.第三方账号登录4.3.单token系统和双token系统业务逻辑 二.Spring Security1.快速入门2.基本原理FilterSecurityInterceptorExceptionTranslationFilterUsernamePassw…

Vue3+Three.js+antvG2实战项目 智慧城市(四)

前言 在网上找了很久都没有找到使用Three.js开发智慧城市的免费文章或者免费视频,自己花了一点时间做了一个纯前端的智慧城市项目。 技术栈都是最新的:vue3vitetypeScriptThreeantv G2 源码分享 源码 模型,天空图盒子链接分享(不想下载源码可以只用下这个)提取码1234 20230424_…

在时间序列预测中使用 FRFT

RNN Encoder–Decoder 每一个时刻都有一个隐藏状态向量 S_t&#xff0c;当这个向量传递到最后的一个 token 时&#xff0c;即 S_n (n为输入序列的最大长度)&#xff0c;它就是语义编码向量 C C 参与了Decoder过程中每一时刻隐藏状态和输出的计算. 最大的局限性就在于编码和解码…

美国访学J类签证费涨价15%|5月30日生效

2023年5月30日起&#xff0c;美国签证费用开始上调&#xff0c;其中访问学者的J类签证将由160美元调整至185美元&#xff0c;涨价15%。届时美国驻华大使馆将依据汇率做出调整&#xff0c;并公布具体的人民币数额。知识人网小编提醒相关签证人员提前做好准备。 美国国务院发布的…

手撕二叉树(图解+代码)

二叉树 &#x1f333;1.树的概念&#x1f333;2.二叉树的概念及性质&#x1f34e;2.1 二叉树的概念&#x1f34e;2.2 二叉树的性质 &#x1f333;3.二叉树的基本操作&#x1f34e;3.1 二叉树的遍历&#x1f34e;3.2 获取树中节点的个数&#x1f34e;3.3 获取叶子节点的个数&…

Python学习5:计算弓形的面积

类型&#xff1a;数值运算 描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ …

大数据学习初级入门教程(十七) —— Elasticsearch 8.7.0 完全分布式集群的安装、配置、启动和测试

好久没用 Elasticsearch 集群了&#xff0c;参考以前写的《大数据学习初级入门教程&#xff08;八&#xff09; —— Elasticsearch 7.6.2 单节点的安装、启动和测试_elasticsearch 7.6.2需要专属网络_孟郎郎的博客-CSDN博客》、《大数据学习初级入门教程&#xff08;九&#x…

面向对象与面向过程的区别

“劳累一天回到家中“ ”对象赶忙问我想吃些什么&#xff1f;“ “望着窗外淅淅沥沥的小雨 蛋炒饭吧” “雨声洗涤了心灵 炒饭温暖了肚子” “我没有问她炒饭是怎么做的&#xff0c;他也没有管我吃相有多难看” “我面向对象&#xff0c;她也面向对象” 面向对象和面向过程的区…

Unity3D:编辑场景模板

场景模板 Inspector 场景模板 Inspector 包含以下部分&#xff1a; Details&#xff1a;指定模板使用哪个场景&#xff0c;并包含模板的描述&#xff0c;该内容将出现在 New Scene 对话框中。Thumbnail&#xff1a;提供用于为模板创建预览图像的选项。Scene Template Pipelin…