MapReduce的Shuffle过程

Shuffle是指从 Map 产生输出开始,包括系统执行排序以及传送Map输出到Reduce作为输入的过程.
Shuffle 阶段可以分为 Map 端的 Shuffle 阶段和 Reduce 端的 Shuffle 阶段.
Shuffle 阶段的工作过程,如图所示:
在这里插入图片描述

Map 端的 Shuffle 阶段

1)每个输入分片会让一个 Map 任务来处理,默认情况下,以 HDFS 的一个块的大小为一个分片.Map 函数开始产生输出时,并不是简单地把数据写到磁盘中;因为频繁的磁盘操作会导致性能严重下降.它的处理过程是把数据先写到内存中的一个缓冲区(环形缓冲区),并做一些预排序,以提升效率.
2)每个 Map 任务都有一个用来写入输出数据的循环内存缓冲区(默认大小为 100MB),当缓冲区中的数据量达到一个特定阈值(默认是 80%)时,系统将会启动一个后台线程,把缓冲区中的内容写到磁盘中[Spill]阶段.在写入磁盘过程中,Map 输出继续被写到缓冲区中,但如果在此期间缓冲区被填满,那么 Map 任务就会阻塞直到写磁盘过程完成.
3)在写磁盘前,线程首先根据数据最终要传递到的 reduce 任务把数据划分成相应的分区(Partition).在每个分区中,后台线程按 Key 进行排序,如果有一个 Combiner,便会在排序后的结果上运行.
4)一旦内存缓冲区达到溢写的阈值,就会创建一个溢写文件,因此在 Map 任务完成其最后一个输出记录后,便会有多个溢出写文件.在 Map 任务完成之前,溢写文件被合并成一个索引文件和数据文件(多路归并排序)[Merge Sort 阶段].
5)溢写文件归并完毕后,Map 任务将删除所有的临时溢写文件,并告知 TaskTracker 任务已完成;只要其中一个 Map 任务完成,Reduce 任务就会开始复制(http协议)它的输出[Copy 阶段].
6)Map 任务的输出文件放置在运行 Map 任务的 TaskTracker 的本地磁盘上,它是运行 Reduce 任务的 TaskTracker 所需要的输入数据.

Reduce 端的 Shuffle 阶段

1)Reduce 进程启动一些数据复制线程,请求 Map 任务所在的 TaskTracker 以获取输出文件[Copy 阶段].
2)将 Map 端复制过来的数据先放入内存缓冲区中[Merge阶段].Merge 有 3 种形式:内存到内存、内存到磁盘、磁盘到磁盘.默认情况下,第一种形式不启用,第二种形式一直在运行(Spill 阶段),直到结束,第三种形式生成最终的文件.
3)最终文件可能存在于磁盘中,也可能存在于内存中,但是默认情况下是位于磁盘中的.当 Reduce 的输入文件已定,整个 Shuffle 阶段就结束了;然后就是 Reduce 执行,把结果放到 HDFS 中[Reduce 阶段].
copy merge 占整个reduce运行进度的33%,但可能因为map阶段文件分布不均导致该阶段耗费50-70%的时间.

为什么缓冲区的阈值设定为80M,而不是100M写满后才把文件写入到硬盘呢?

环形缓冲区,可以使写入磁盘的过程不间断,提高任务的性能.  
保留20M可用空间的意义就是为了 map 可以持续不断的向 buffer 中写入数据;
如果设定100M写满再向硬盘写入的话,map 向 buffer 写入的进程就会中断,从而造成资源的浪费.

为什么在map阶段要进行merge sort ?

如果不排序的话,数据就会杂乱无章,
而经过排序后,各个map之间进行合并的话就会简单很多,
只需要进行纵向合并就可以得到我们需要的值了

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

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

相关文章

【探索Java编程:从入门到入狱】Day4

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台

YoloDeployCsharp|基于.NET Framework的YOLO深度学习模型部署测试平台 1. 项目介绍2. 支持模型3. 时间测试4. 总结 1. 项目介绍 基于.NET Framework 4.8 开发的深度学习模型部署测试平台,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系…

MySql数据库(概念篇)

数据库概念 什么是数据库 数据库见名之意,就是用来存储数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 没接触数据库之前,一般都是将数据存储在文件中。比如execl文件,word文件中。但是…

基于SpringBoot的饭店外卖平台的设计与实现

项目描述 这是一款基于SpringBoot的饭店外卖平台的系统 模块描述 用户端 登录 首页 商家信息 点餐 菜品列表 下单 订单列表 账号下单列表 个人中心 个人资料 修改信息 评论管理 评论菜品 查看评论 打赏骑手 打赏骑手 管理员 登录 菜品管理 修改 下架 订单列表 下单记录 菜品管理…

nginx 负载均衡、反向代理实验

nginx 负载均衡、反向代理实验 实验目的 理解概念:明确反向代理和负载均衡的基本概念及其在网络架构中的作用。 掌握技能:学习如何配置Nginx以实现反向代理和负载均衡功能。 实践应用:通过实际操作,体验Nginx如何提升Web服务的可…

LeetCode406:根据身高重建队列

题目描述 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

TinyXML-2介绍

1.简介 TinyXML-2 是一个简单、小巧的 C XML 解析库,它是 TinyXML 的一个改进版本,专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库,并且可以很容易地集成到项目中。 tinyXML-2 的主要特点包括&#xff1a…

远程工作的数据安全挑战和解决策略

随着远程工作的普及,数据安全面临了前所未有的挑战。企业在应对这些挑战时,必须采取切实有效的策略来保护敏感信息。以下是远程工作数据安全的主要挑战和相应的解决策略: 数据安全挑战 设备丢失或被盗:员工在外工作时&#xff0c…

ldap对接jenkins

ldap结构 配置 - jenkins进入到 系统管理–>全局安全配置 - 安全域 选择ldap - 配置ldap服务器地址,和配置ldap顶层唯一标识名 配置用户搜索路径 - 配置管理员DN和密码 测试认证是否OK

AIGC技术带给我们什么?基于AIGC原理及其技术更迭的思考

AIGC技术带给我们什么?基于AIGC原理以及技术更迭的思考 前言 AI,这个词在如今人们的视野中出现频率几乎超过了所有一切其他的事物,更有意思的是,出现频率仅次于这个词的,几乎都会加上一个修饰亦或是前缀——AI&#…

ROS机器人实用技术与常见问题解决

问题速查手册(时实更新)更加全面丰富的问题手册记录 1.机器人使用GPARTED挂载未分配空间 需要在图型界面下操作,建议使用no machine连接 安装gparted磁盘分区工具, sudo apt-get install gparted -y 启动软件 sudo gparted 点击磁盘/内存…

如何使用vue脚手架创建项目

前言 使用vue搭建项目的时候,我们可以通过对应的cmd命令去打开脚手架,然后自己配置对应的功能插件 说明: 要使用Vue脚手架创建项目,你需要先确保你已经安装了Node.js和npm(Node.js的包管理器)。然后&#…

热敏电阻怎么进行性能测试?并以LabVIEW为例进行说明

过程也可用于执行热敏电阻测量。RTD和热敏电阻遵循非常相似的功能原理,测量步骤与下面提供的步骤相同。有关热敏电阻的更多信息,请参阅本文档。 查找设备引脚排列 在连接任何信号之前,请找到您的设备引脚排列。 打开NI MAX并展开设备和接口。…

视频素材库在哪里找免费手机版?8个可以用手机浏览的素材网

在视觉内容占据主导地位的今天,合适的视频素材可以大大提升项目的吸引力和效果。以下列出的视频素材网站为广告制作者、社交媒体策略师及电影制作人提供了从传统到现代风格的各种视频素材选择,满足不同的创作需求。 1. 蛙学府(中国&#xff…

PyGame 文字显示问题及解决方法

在 Pygame 中显示文字时可能会遇到一些问题,例如文字显示不清晰、字体不正确或者文字位置不准确等。以下是一些常见的问题及其解决方法,具体情况可以看看情况。 1、问题背景 一位用户在使用 PyGame 库进行游戏开发时,遇到了一个问题&#xf…

服务器关机前未退出xampp导出MySQL无法启动

背景解决 五一放假,服务器关机了,但是关机前没有正常关闭数据库服务,导致数据库无法启动! 查看错误日志如下 从报错信息可以看出是MySQL这个服务相关文件出现问题了,解决思路:重新安装xampp 重新安装xam…

automa警惕通过点击元素打开新的标签页,因为你可能会被他蒙蔽!

大家好,我是大胡子,专注于研究RPA实战与解决方案。 我们经常用到automa里面的【点击元素】组件,但要警惕通过点击元素打开新的标签页,例如下面这个场景,点击公众号的图文消息,之后,要自动输入标…

self-attention 的 CUDA 实现及优化 (上)

self-attention 的 CUDA 实现及优化 (上) 导 读 self-attention 是 Transformer 中最关键、最复杂的部分,也是 Transformer 优化的核心环节。理解 self-attention ,对于深入理解 Transformer 具有关键作用,本篇主要就围绕 self-attention 展…

QT--2

Qt界面设计 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFla…

ILI9341显示驱动芯片的使用

ILI9341是一种常见的TFT LCD显示驱动芯片,它在众多的应用中都有广泛的使用。这种芯片的一个显著特点是它支持16位RGB565颜色,这意味着它可以显示多达65536种不同的颜色。这使得ILI9341能够提供鲜艳、生动的色彩效果,对于需要表现丰富色彩的应…