大数据面试题:超详细版MapReduce工作原理

news2024/9/23 9:24:44

面试题来源:

《大数据面试题 V4.0》

大数据面试题V3.0,523道题,679页,46w字

参考答案:

MapReduce详细流程:

1、准备待处理文件(200M)

2、submit()对原始文件进行切片分析(128M一块,这里0-128M为第一块,128-200位第二块)

3、提交信息

客户端会准备三样东西(Job的切片:Job.split,jar包:wc.jar,xml:Job.xml),对这个集群进行提交。

如果是本地模式,则没有jar包,正常生产模式下,都是用的YARN集群模式,所以jar包是一定有的。

4、计算出MapTask数量

客户端向YARN提交后,YARN会开启一个Mrappmaster(整个任务运行的老大),Mrappmaster会读取客户端对应的信息,最主要的就是读取切片信息(Job.split),Mrappmaster会根据切片个数,开启对应数量的MapTask,这里是两个切片,则对应开启两个MapTask。

5、MapTask工作

MapTask一启动后,就会开始工作,MapTask通过InputFormat来读取输入的文件,默认使用TextInputFormat,TextInputFormat源码里面有两个方法:1)RecorderReader(按行进行读取)和 2)isSplitable(判断这个文件是否可以切割),通过RecorderReader对文件数据按行进行读取,读完后,返回K(整个文件中的起始字节偏移量)和V(这行的内容)。

6、逻辑运算

数据读取完成后,将数据给到Mapper,Mapper里面是用户根据实际需求自己写的业务逻辑代码。数据处理完成后,通过outputCollector向环形缓冲器写入<k,v>数据。

7、向环形缓冲器写入<k,v>数据

环形缓存区默认大小为100M,左侧存索引,右侧存数据。当环形缓冲区数据写到80%时,进行反向写,将数据写入到磁盘。

这里可能会有一个小问题:为什么不存到100%才开始反向写?

主要是为了不影响Mapper处理完的数据写入环形缓冲区,如果写到100%环形缓冲区再反向写,就会导致Mapper处理后的数据无法再接着写入环形缓冲区,需要等环形缓冲区的数据反写到磁盘,才能继续写入环形缓冲区,影响处理进度,所以当环形缓冲区数据写到80%时,则开始进行反写,留下20%空间可以进行写入Mapper处理完的数据。

这里可能又有一个问题:如果当环形缓冲区数据到80%后反写,但是Mapper处理完的数据写入速度大于反写到磁盘的速度,导致环形缓冲区存储100%怎么办?

这个问题底层已经做过处理,如果Mapper处理完的数据写入速度大于反写到磁盘的速度,导致环形缓冲区存储100%,此时数据写入会暂定,直到有一定空间后,才会继续往环形缓冲区中写入数据,避免处理误差。

8、分区、排序

当数据写入到环形缓冲区时,也就是写入之前已经进行了分区,后续会根据分区,数据分别进入到对应的Reduce中独立进行处理。当数据溢写到磁盘时,会在溢写前进行排序,对数据索引进行排序,此时使用快排方式进行排序

9、溢出文件到磁盘(分区且区内有序)

当环形缓冲区中数据达到80%时,数据就会溢写到磁盘上,溢写文件可以是多个。

10、Merge归并排序

通过归并排序对所有溢写文件根据分区进行排序,保证每一个分区内数据有序。归并排序后数据就会存储到磁盘上。

11、Combiner合并

这个环节是发生在归并排序前面,Combiner合并会将每个分区中k相同的数据进行预聚合,比如一个分区存在<a,1>和<a,1>两个数据,则会合并成<a,2>,提高传输效率。

12、启动ReduceTask

当所有的MapTask任务完成后,则启动相对应数量的ReduceTask,并告知ReduceTask处理数据范围(数据分区)。注意,并不一定是当所有的MapTask任务完成后才会开启ReduceTask,当我们MapTask数量比较多的时候,可以设置当完成多少个MapTask任务后就开启ReduceTask任务,处理完的数据再跟后面MapTask处理好的数据一起处理,提升处理效率。

13、下载数据到ReduceTask

ReduceTask主动从MapTask对应指定的分区拉取数据,再对来自不同分区的数据进行合并、归并排序

14、分组(可选流程)

此时可根据实际情况,是否选择进行一次分组。

15、Reduce读取数据

Reduce方法中每次对一组数据(相同key)进行处理,数据处理完成后,则往外写数据。

16、往外写数据

通过OutputFormat往外写数据,OutPutFormat中包含RecordWriter方法,通过RecordWriter方法往外写数据,从而形成输出文件。其它的Reduce也是一样的流程。

上面的流程是整个MapReduce最全工作流程,Shuffle过程是从第7步开始到第16步结束,Shuffle大概过程如下:

1)MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中

2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件

3)多个溢出文件会被合并成大的溢出文件

4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序

5)ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据

6)ReduceTask会抓取到同一个分区的来自不同MapTask的结果文件,ReduceTask会将这些文件再进行合并(归并排序)

7)合并成大文件后,Shuffle的过程也就结束了,后面进入ReduceTask的逻辑运算过程(从文件中取出一个一个的键值对Group,调用用户自定义的reduce()方法)

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

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

相关文章

热点活动-秒杀功能设计

一、需求描述 秒杀活动是电子商务兴起后出现的一种新型的购物方式&#xff0c;通过网上APP、小程序等平台推出一些低于市场价格的商品&#xff0c;提升购买率的营销活动&#xff0c;所有买家在同一时间网上抢购的一种销售方式。对比其他的营销活动&#xff0c;秒杀限时性更强&…

地平线J5芯片部署参考算法(2023.07.27)

本文主要是记录地平线官方提供的可在J5芯片上部署的参考算法。 参考算法数据集FPSPointPillarsKITTI116 (双核)CenterPointNuscenes98.72&#xff08;双核&#xff09;FCOS3DNuscenes589 (双核)GANetCULane2431&#xff08;双核&#xff09;Swin TransformerImageNet133&#…

网络加速技巧

某APP限制网速&#xff0c;可以这么做&#xff1a; &#xff08;1&#xff09;把网络禁用 &#xff08;2&#xff09;在APP的设置里面&#xff0c;把优化速率打开 &#xff08;3&#xff09;启用网络 2023年7月27日亲测有用&#xff0c;开启优化速率之前是100k/s&#xff0c;开…

机器学习---混淆矩阵代码

1. 导包&#xff1a; import pandas as pd from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.svm import SVC …

共用体类型

共用体&#xff08;union&#xff09;是一种成员共享存储空间的结构体类型。 union 共用体类型名 {成员列表 } 共用体内存长度是所有成员内存长度的最大值。 #include <iostream> using namespace std;int main() {//先声明共用体类型再定义共用体对象 union A {int m,…

11-2_Qt 5.9 C++开发指南_QSqlQueryModel的使用(QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据)

文章目录 1 QSqlQueryModel 功能概述2 使用 QSqlQueryModel 实现数据查询2.1 实例功能2.2 可视化UI设计2.3 主窗口类定义&#xff08;去除自动生成的槽函数&#xff09;2.4 打开数据库2.5 记录移动 1 QSqlQueryModel 功能概述 从下图中可以看到&#xff0c;QSqlQueryModel 是 …

代码随想录算法训练营day13 | 239. 滑动窗口最大值,347. 前 K 个高频元素

239. 滑动窗口最大值 目录 239. 滑动窗口最大值 347. 前 K 个高频元素 239. 滑动窗口最大值 难度&#xff1a;hard 类型&#xff1a;队列&#xff0c;单调队列&#xff0c;滑动窗口 思路&#xff1a; 构造单调队列&#xff0c;维护大小为k的队列。队列里的元素始终是单调递…

无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。npm.ps1 cannot be loaded

目录 原因 解决方法 提示 查看当前的执行策略命令 改回默认值 "Restricted"命令 这个错误提示是因为您的系统禁止执行 PowerShell 脚本。 原因 现用执行策略是 Restricted&#xff08;默认设置&#xff09; 解决方法 以管理员身份运行 PowerShell&#xff1a;右键…

AICodeConvert网站,可以用AI把代码从一种语言转换为另一种语言实现,代码开源了,从 6.24 到现在一个月, 没有主动推广,居然9.8K 访问量

这是我一个之前周六 6.24 开始验证思路的项目&#xff0c;验证的感觉差不多&#xff0c;不做主动推广到现在一个月&#xff0c;访问量 9.8K 。 源码开源了&#xff0c;github.com 网址&#xff1a;AICodeConvert 另一个在佛系验证中的还有这个&#xff1a;Base64.kr&#xf…

gedit更改字体大小颜色、行号、更改各种属性

最近在linux&#xff08;CentOS&#xff09;中运行gedit时发现&#xff1a; 如果用普通用户运行&#xff0c;不会报错&#xff0c;但是不会出现Preferences &#xff08;首选项&#xff09;等选项&#xff0c;不能进行基本属性参数的更改&#xff1b;如果采用su、sudo 运行则会…

机器学习之十大经典算法

机器学习算法是计算机科学和人工智能领域的关键组成部分&#xff0c;它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法&#xff0c;其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法&#xff0c;每种算法都在特定的领…

云原生架构的定义

前言&#xff1a; 从技术的角度&#xff0c;云原生架构是基于云原生技术的一组架构原则和设计模式的集合&#xff0c;旨在将云应用中非业务代码的部分进行最大化的剥离&#xff0c;从而让云设施接管应用中原有的大量非功能特性&#xff08;如弹性、韧性、安全、可观测性、灰度…

MySQL中锁的简介——全局锁

1.锁的概述及分类 2.全局锁的介绍 给数据库加全局锁&#xff1a; flush tables with read lock;数据备份&#xff1a; mysqldump备份指令 root用户名 1234 密码 itcast数据库名称 itcast.sql备份文件名称 mysqldump -uroot -p1234 itcast >itcast.sql;数据库全局锁解锁&am…

复现YOLOv5改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!

MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…

word显示书签并给书签添加颜色

CTRg 定位书签 在 Word 的用户界面中&#xff0c;没有直接的选项可以批量为所有书签设置颜色。但你可以使用 VBA 宏或者编写自定义的功能来实现这个需求。这里给出一个简单的 VBA 宏&#xff0c;它可以设置当前文档中所有书签内文本的颜色&#xff1a;vba Sub ColorAllBookmark…

【高级数据结构】线段树

目录 最大数&#xff08;单点修改&#xff0c;区间查询&#xff09; 线段树1&#xff08;区间修改&#xff0c;区间查询&#xff09; 最大数&#xff08;单点修改&#xff0c;区间查询&#xff09; 洛谷&#xff1a;最大数https://www.luogu.com.cn/problem/P1198 题目描述 …

11-3_Qt 5.9 C++开发指南_QSqlQuery的使用(QSqlQuery 是能执行任意 SQL 语句的类)

文章目录 1. QSqlQuery基本用法2. QSqlQueryModel和QSqlQuery联合使用2.1 可视化UI设计框架2.1.1主窗口的可视化UI设计框架2.1.2 对话框的可视化UI设计框架 2.2 数据表显示2.3 编辑记录对话框2.4 编辑记录2.5 插入记录2.6 删除记录2.7 记录遍历2.8 程序框架及源码2.8.1 程序整体…

unity关于匀速移动某些值的方法

可能很多人会用到Verctor3.Lerp、Mathf.LerpUnclamped等等 这种其实不是匀速 看一下这个整体差不多的逻辑 public static float Lerp(float a, float b, float t){return a (b - a) * t;};这个逻辑就是&#xff0c;从a值到b值&#xff0c;返回一个a值加&#xff08;b值-a值&…

msvcp140.dll丢失怎么办?(详细解决方法)

1.msvcp140.dll有什么用&#xff1f; 运行C程序&#xff1a;msvcp140.dll文件包含了许多C程序所需的函数和资源&#xff0c;使得C程序能够在计算机上正确运行。 提供运行时库&#xff1a;msvcp140.dll文件包含了C程序在运行时所需的库文件&#xff0c;如输入/输出操作、内存管…

【梯度下降在波士顿房价预测中的应用】

数据准备 我们首先需要加载波士顿房价数据集。该数据集包含房屋特征信息和对应的房价标签。 import pandas as pd import numpy as npdata_url "http://lib.stat.cmu.edu/datasets/boston" raw_df pd.read_csv(data_url, sep"\s", skiprows22, headerN…