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

news/2024/3/29 19:48:37/文章来源:https://blog.csdn.net/qq_18625571/article/details/129864659

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.luyixian.cn/news_show_103078.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10.java程序员必知必会类库之邮件

前言 邮件功能在当前互联网应用中已经是很成熟的功能,也是作为java程序员应该掌握的技能。常见使用场景有: 电商软件开电子发票,需要发到用户邮箱里面生产实时报警,需要发到邮箱里面银行软件申请的征信报告,电子账单…

《C++ Primer Plus》(第6版)第17章编程练习

《C Primer Plus》(第6版)第17章编程练习 《C Primer Plus》(第6版)第17章编程练习1. 计算输入流中第一个\$之前的字符数目2. 将键盘输入(直到模拟的文件尾)复制到通过命令行指定的文件中3. 将一个文件复制…

【难学易用c++ 之 继承】

目录: 前言一、继承的概念及定义(一)概念(二)继承定义继承关系和访问限定符继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七…

如何使用阿里云短信服务实现登录页面,手机验证码登录?

1:个人如何使用阿里云短信服务? 2022如何使用个人阿里云短信服务?_linxiMY的博客-CSDN博客添加完成之后,等待审核!一般2个小时就会出来审核结果了,这里我因为注册申请时填写规则有误,足足审核了…

pytest 学习三(前置后置操作)

pytest测试框架_pytest框架-CSDN博客 一、常用的操作 一、setup/teardown 每个用例之前、之后执行 二、setup_class/teardown_class 在每个类之前、之后执行一次 二、pytest.fixture 设置前置后置操作范围 pytest.fixture(scope"",params,autouse,ids,name) 其中 sc…

JavaScript模块化开发

目录: 1 认识模块化开发 2 CommonJS和Node 3 require函数解析 4 AMD和CMD(了解) 5 ESModule用法详解 6 ESModule运行原理 模块化不是两个不同的js文件直接导入到某个页面中的,因为这两个文件只要有相同的变量或函数&#xf…

R基础函数概览(一)

rep 函数形式:rep(x, time , length , each ,) 参数说明: x:代表的是你要进行复制的对象,可以是一个向量或者是一个因子。 times:代表的是复制的次数,只能为正数。负数以及NA值都会为错误值。复制是指的…

云原生(docker+k8s+阿里云)-Docker

Gitee-Kubernetes学习 kubectl备忘清单 k8s官方文档-task [云原生-kubectl命令详解] ingress详解 ingress官方文档 云原生-语雀-架构师第一课 从Docker到Kubernetes进阶-社区 云计算学习路线-阿里云大学 如上图,服务器有公网ip和私网ip,公网ip是外部访问…

Ubuntu20.04使用多卡训练HyperNetwork模型和LoRA模型全流程及疑难问题解决方案

目录 一. LoRA模型多卡训练1.1 安装xformer等库1.2 设置路径1.3 多卡训练 二. LoRA模型多卡训练疑难报错解决方案多卡训练报错 软硬件配置: CPU: AMD 5800 8core 16Thread GPU: NVIDIA RTX 3090 *1 NVIDIA TITAN RTX *1 OS: Ubuntu20.04 一. LoRA模型多卡训练 1.1 …

一篇终结synchronized

一:基本原理 Java对象在内存中由两部分组成 : 1 是成员变量 2 是对象头,以32位虚拟机介绍:此时对象头是64位,即8字节 其中32个字节代表 mark word 另外32个字节代表klass word分别是什么意思呢? 1 klass …

写题总结1

先把自己写完的总结一下: 题目一: 猫儿园的告示牌上贴着 ab 大小的矩形广告纸。猫猫对广告不感兴趣,她想知道能否用 cd 的矩形白纸完全覆盖这个广告。猫猫可以对白纸进行平移、旋转,但不能折叠或撕开等。如果可以完全覆盖输出 YE…

滴水逆向3期笔记与作业——01汇编

防止OneNote丢失。 海哥牛逼。 01汇编笔记 01进制进制定义10-2进制转换八进制 02数据宽度/逻辑运算数据宽度与存储逻辑运算计算机做加法的本质作业 03通用寄存器_内存读写通用寄存器表通用寄存器图内存读写计算机操作系统位数意义 04内存地址_堆栈寻址公式PUSH指令POP指令作业 …

【IAR工程】STM8S基于ST标准库读取DHT11数据

【IAR工程】STM8S基于ST标准库读取DHT11数据 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!🍁对于文中所提供的相关资源链接将作不定期更换。&…

4月有8本SCIE期刊被剔除(附MDPI/Frontiers/Hindawi最新在检期刊)

2023年4月SCI、SSCI期刊目录更新 2023年4月18日,科睿唯安更新了WOS期刊目录,继上次3月WOS期刊目录剔除50本SCIE&SSCI期刊之后,此次4月更新又有8本SCIE期刊发生变动,其中有4本期刊被踢出SCIE数据库,4本期刊更改了名…

流程图拖拽视觉编程--概述

一般的机器视觉平台采用纯代码的编程方式,如opencv、halcon,使用门槛高、难度大、定制性强、开发周期长,因此迫切需要一个低代码开发的视觉应用平台。AOI缺陷检测的对象往往缺陷种类多,将常用的图像处理算子封装成图形节点,如抓直…

Android 系统架构大图

android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux核心层。 1.应用程序 Android会同一系列核心应用程序包一起发布,该应用…

确定因果随机森林的树木数量 the number of trees

前言 推断因果性和分析异质性是统计学家在处理混杂任务中的圣杯。传统且主流的方法有:倾向性评分、分层分享、比例风险模型等。新的方法也有很多,代表就是:因果随机森林。这种算法,浅看难度一般,深入探索发现坑还是很多的。这篇博客不对算法做深入探讨,仅仅是我在阅读文…

Nautilus Chain :基于模块化架构的Layer3正在走向成熟

Nautilus Chain 是一个基于 Eclipse 和 Celestia 构建的模块化 Layer3 链。作为定位在 Layer0 的链基建概念,Eclipse 和 Celestia 为面向未来的区块链扩容技术提供了一套开发工具和基础框架。尽管这种前沿技术过去一直处于概念验证阶段,尚未推出适用于大…

Java并发(三)----创建线程的三种方式及查看进程线程

一、直接使用 Thread // 创建线程对象 Thread t new Thread() {public void run() {// 要执行的任务} }; // 启动线程 t.start(); 例如: // 构造方法的参数是给线程指定名字,推荐 Thread t1 new Thread("t1") {Override// run 方法内实现…

手把手教你PXE高效网络装机、Kickstart无人值守安装(详细版)

目录 一、部署PXE远程安装服务1.1PXE定义1.2PXE服务优点1.3搭建网络体系前提条件1.4 搭建PXE远程安装服务器 二. 实验2.1 服务器操作2.2 安装启动TFTP服务并修改TFTP服务的配置文件2.3 安装并启用DHCP服务2.4 准备linux内核,初始化镜像文件2.5 准备PXE引导程序2.6 安…