Shuffle的作用以及MapReduce的Shuffle过程

news2025/1/21 7:18:16

Shuffle的设计

为什么需要Shuffle?

Shuffle的本质是基于磁盘划分来解决分布式大数据量的全局分组、全局排序、重新分区【增大】 等问题

因为单台机器的资源处理不了分布式大数据量全局分区/排序/分组

所以需要通过Shuffle对每一台机器的数据构建一个Task来做分区的标记(通过Hash或Ranger分区器)这样所有的数据被标记后就可以根据标记进入指定分区,实现全局分区/分组/排序功能


举例说明

假设有一个HDFS文件,分成三个Block块,每台机器上有一个Block
 node1-Block1:(a,1)(c,9)(c,6)(d,3)
 node2-Block2:(b,4)(a,8)(d,2)
 node3-Block3:(b,7)(d,5)

需求:在分布式大数据量计算过程中,需要对所有数据进行全局分组 / 全局排序 / 重新分配

全局分组:相同单词的放在一组

  • node1-Block1:(a, [1,8])(c, [9,6])
  • node2-Block2:(b, [4,7])
  • node3-Block3:(d, [3,2,5])

全局排序:按照整体value降序排序

  • node1-Block1:(c,9)(a,8)(b,7)(c,6)
  • node2-Block2:(d,5)(b,4)(d,3)
  • node3-Block3:(d,2)(a,1)
    在这里插入图片描述

重新分区:数据分配不均衡,希望更加均衡

  • node1-Block1:(a,1)(a,8)(d,3)
  • node2-Block2:(b,4)(b,7)(d,2)
  • node3-Block3:(c,9)(c,6)(d,5)

以上需求,可以在一台机器的内存中实现吗?

答案:不能

因为将多台机器的数据合并到一台机器上,可能会由于数据量过大导致一台机器内存被撑爆


MR的Shuffle过程

阶段:Map端Shuffle、Reduce端Shuffle

功能:分区、排序、分组

目标:Shuffle最终目的是为了做分组,Shuffle=>分组、Reduce=>聚合


问题:MR的Shuffle设计目的是为了做分组,为什么要经过排序,而且是三次排序?

  • 第三次排序:为了加快分组的效率
  • 第二次排序:为了加快第三次排序的速度,基于有序的合并可以更快
  • 第一次排序:为了加快第二次排序的速度

过程

  • Input:负责读取数据,对数据进行切片,将数据转换成KV => K1V1
  • Map:负责数据一对一的处理,得到KV => K2V2
  • Shuffle:分区、排序、分组
    • Map端Shuffle

      • 分区Partition:调用分区器给每条K2V2打上标签,标记这条数据未来会被哪个Reduce进行处理
      • 溢写Spill:所有分区好的数据会进入一个内存区域【环形缓冲区100M】,达到阈值80%,会被锁定,做排序,然后溢写
        • 排序规则:相同分区的数据放在一起,每个分区内部按照Key升序排序
        • 排序算法:快排【小数据量】
        • 发生位置:内存
        • 溢写:将排序好的数据写入磁盘变成一个有序的小文件
      • 合并Merge:每个MapTask会将自己生成的所有小文件整体合并为一个有序的大文件,合并过程中会进行排序
        • 排序规则:相同分区的数据放在一起,每个分区内部按照Key升序排序
        • 排序算法:归并【基于数据索引的大数据排序算法】
        • 发生位置:磁盘
        • 产出:每个MapTask最终产生两个文件:1-数据文件,2-索引文件【每个分区的数据在文件的什么位置】
    • Reduce端Shuffle

      • 拉取Pull:每个Reduce到每个MapTask的结果文件中读取属于自己那部分数据
        • 一个Reduce拿到了多份数据
      • 合并Merge:每个Reduce将拉取到的所有数据进行合并,并且排序
        • 排序规则:内部按照Key升序排序
        • 排序算法:归并【基于数据索引的大数据排序算法】
      • 分组Group:按照Key进行分组,将相同K2的V2放入一个列表中
  • Reduce:负责对所有Map产生的数据进行聚合
  • Output:负责将上一步的结果进行输出

在这里插入图片描述

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

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

相关文章

通关剑指 Offer——剑指 Offer II 055. 二叉搜索树迭代器

1.题目描述 剑指 Offer II 055. 二叉搜索树迭代器 实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会…

20221221英语学习

今日新词 define v.下定义;确切说明(或解释);树立,表明 chemistry n.化学, 物质的化学组成(或性质) fly v.飞, 飞翔, 航行, (乘航空器或航天器)航行 forfeit v.&…

港华燃气上线WeOps推动运维效能提升,托举业务智慧运行!

“嘉为蓝鲸WeOps一体化运维平台有效提升了运维工作效率,满足系统安全要求,尤其是补丁安装、巡检自动化、监控告警等功能,为我们节省了运维人力成本和时间成本。” ——来自港华燃气 港华集团介绍: 港华集团为香港中华煤气在内地…

m在LTE-A系统载波聚合下的资源分配算法的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 载波聚合即CA,是LTE-A中的关键技术。是为满足用户峰值速率和系统容量提升的要求,增加系统传输带宽的技术,通过CA技术,用户最高上网速率可提升到300…

IPv4 和 IPv6 报文格式详解

文章目录1 概述2 报文格式2.1 IPv42.2 IPv62.3 两者区别3 网工软考真题1 概述 2 报文格式 2.1 IPv4 中文名英文名长度 bit(位)解释版本Version4IP协议版本号,固定为 4首部长度Header Length4数据报首部的总长度。 以 4 Byte(字节…

【Java基础知识复盘】Java概述篇

本人知识复盘系列的博客并非全部原创,大部分摘自网络,只是为了记录在自己的博客方便查阅,往后也会陆续在本篇博客更新本人查阅到的新的知识点,望悉知! Java概述 何为编程 编程就是让计算机为解决某个问题而使用某种程…

100多条2023年元宇宙统计数据!Hubbleverse替你整理好了!

欢迎来到Hubbleverse 🌍 关注我们 关注宇宙新鲜事 📌 预计阅读时长:9分钟 本文仅代表作者个人观点,不代表平台意见,不构成投资建议。 元宇宙最近被评为最热门的新兴技术趋势之一。在过去的几年里,元宇宙…

SpringBoot整合Mybatis之Mapper接口和映射文件

一、什么是MyBatis MyBatis中文网https://mybatis.net.cn/ MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型…

消息中间件执行原理

1 关于消息中间件 1.1 什么是消息中间件? 消息中间件是指在分布式系统中完成消息的发送和接收的基础软件。 消息中间件也可以称消息队列(Message Queue / MQ),用高效可靠的消息传递机制进行与平台无关的数据交流,并基…

区块链技术应用展望

区块链作为一个"去中心化"的分布式账本数据库,能够让数据的产生、运行和应用更加公开与透明。区块链被认为是互联网之后又一大创新之举,是第二个互联网时代——价值互联网时代的来临,区块链将从基础设施层面为各行各业带来巨大的变…

力扣(LeetCode)353. 贪吃蛇(2022.12.20)

请你设计一个 贪吃蛇游戏,该游戏将会在一个 屏幕尺寸 宽度 x 高度 的屏幕上运行。如果你不熟悉这个游戏,可以 点击这里 在线试玩。 起初时,蛇在左上角的 (0, 0) 位置,身体长度为 1 个单位。 你将会被给出一个数组形式的食物位置…

C++中二叉树的递归遍历方法

在《C中二叉树的非递归遍历方法2-1》中提到,二叉树的遍历分为前序遍历、中序遍历、后序遍历和层序遍历四种。要遍历的二叉树如图1所示。 图1 二叉树结构 创建该二叉树的代码请参见《C中二叉树的非递归遍历方法2-1》。 1 前序遍历的递归实现 前序遍历的输出顺序是…

VC2010 的控制台程序中使用 EasyX

以下是在 VC2010 的控制台应用程序中使用 EasyX 的具体步骤: 1. 启动 VC2010,点击菜单 File -> New -> Project...,打开 New Project 对话框: 2. 选择 “Win32 Console Application” 类型的项目,并选择项目所在…

「驱动知识」Linux下RTC时间的读写分析

Linux下RTC时间的读写分析​ 1.1.1 系统时间与RTC时间​ Linux系统下包含两个时间:系统时间和RTC时间。​ 系统时间:是由主芯片的定时器进行维护的时间,一般情况下都会选择芯片上最高精度的定时器作为系统时间的定时基准,以避免…

【我不熟悉的javascript】map和weakmap的区别

map 保存键值对,并且能够记住键的原始插入顺序,任何值(对象或者基本类型)都可以作为一个键或一个值 基本方法有 get, set, has, delete, clear长度 .size迭代 keys, values, extries, forEach可以使用for ...of 迭代任何值(对象或者基本类型)都可以作为…

如何在头条做营销:2022今日头条营销价值洞察报告.pdf(附下载链接)

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点《底层逻辑》高清配图华为2021数字化转型:从战略到执行.pdf华为项目管理金种子培训教材.pdf清华大学256页PPT元宇宙研究报告.pdf&#xf…

nn.AdaptiveAvgPool2d和nn.AvgPool2d的区别

nn.AdaptiveAvgPool2d 功能:该函数与二维平均池化运算类似,区别主要体现在自适应上,对于任何输入大小,输出大小均为指定的HW大小。 nn.AdaptiveAvgPool2d(output_size)output_size:指定的输出大小,可以是…

echarts-for-weixin只显示折线图,其他不显示解决办法

小程序使用echarts-for-weixin展示图表,结果只展示折线图,其他的统统不显示,百度大法一下午终于知道可能是echarts包内只有折线图。 下载好替换搞定!

【Vue 快速入门系列】3分钟掌握Vue中插槽的使用与理解

文章目录前言一、常规实现方式二、匿名插槽三、具名插槽四、作用域插槽前言 插槽作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于 父组件 > 子组件 。 插槽分类:默认插槽、具名插槽、作用域插…

docker部署solr+zk集群

在三台服务器上搭建solr集群,具体架构如下所示: 192.168.184.127 solr1/zk1 192.168.184.128 solr2/zk2 192.168.184.129 solr3/zk3 1.安装docker 三台服务器上都执行以下命令 # setenforce 0 # systemctl stop firewall…