MapReduce处理数据流程
(一)Shuffle
MapReduce中的Shuffle过程指的是在Map方法执行后、Reduce方法执行前对数据进行分区排序的阶段
(二)处理流程
1. 首先MapReduce会将处理的数据集划分成多个split,split划分是逻辑上进行划分,而非物理上的切分,每个split默认与Block块大小相同,每个split由1个map task进行处理。
2. map task以行为单位读取split中的数据,将数据转换成K,V格式数据,调用一次map方法执行处理逻辑。Map Task处理完的数据首先写入到默认100M的环形缓冲区,当环形缓冲区中的空间被使用到80%时数据会发生溢写。
溢写的数据会经过分区、快速排序形成小文件数据。(根据Key计算出本条数据应该写出的分区号,最终在内部得到(K,V,P)格式数据 写入到当前map task 所在的物理节点磁盘,便于后续reduce task的处理)
3. 为了避免每条数据都产生一次IO,根据split大小不同,可能会发生多次溢写磁盘过程。
4. 每次溢写磁盘时会对数据进行二次排序:按照数据(K,V,P)中的P(分区)进行排序并在每个P(分区)中按照K进行排序,这样能保证相同的分区数据放在一起并能保证每个分区内的数据按照key有序。
5. 最终多次溢写的磁盘文件(多个小文件) 数据会根据归并排序算法合并成一个完整的磁盘文件,此刻,该磁盘文件特点是分区有序且分区内部数据按照key有序。
6. Reduce端每个Reduce task会从每个map task所在的节点上拷贝落地的磁盘文件对应的分区数据,对于每个Reduce task来说,从各个节点上拉取到多个分区数据后,每个分区内的数据按照key分组有序,但是总体来看这些分区文件中key数据不是全局有序状态(分区数据内部有序,外部无序)。
7. 每个Reduce task需要再通过一次归并排序,将拷贝过来的所有同一分区数据进行merge,这样每个分区内的数据变成分区内按照key有序状态,然后通过Reduce task处理将结果写出。

(三)HASH分区算法
MapReduce处理数据过程中,map端将数据转换成K,V格式数据并写入对应的分区,根据key进行hashcode取值然后与Reduce Task个数取模得到该条数据写出的分区号。
public class HashPartitioner<K, V> extends Partitioner<K, V> {/** Use {@link Object#hashCode()} to partition. */public int getPartition(K key, V value, int numReduceTasks) {return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;}}
- hashCode值可能是负数,为了保证key的hashCode非负,所以使用key.hashCode() & Integer.MAX_VALUE 按位与操作
- Map端写入的分区数默认与Reduce task个数相等
(四)压缩
在MapReduce中,压缩是一项常见的优化技术,用于减少数据在存储和传输过程中所占用的空间。通过对输入、中间和输出数据进行压缩,可以有效降低存储成本、减少网络传输开销。

• 压缩比率对比: bzip2 > gzip > snappy > lzo > lz4,bzip2压缩比可以达到8:1;gzip压缩比可以达到5比1;lzo可以达到3:1。
• 压缩性能对比:lz4 > lzo > snappy > gzip>bzip2 ,lzo压缩速度可达约50M/s,解压速度可达约70M/s;gzip速度约为20M/s,解压速度约为60M/s;bzip2压缩速度约为2.5M/s,解压速度约为9.5M/s。
注:
Reduce Task 个数没有固定计算方式,可以根据处理的总数据量大小来大约估算。简单业务中每个reduce task处理512M数据,复杂业务中每个reduce task 处理1G数据。
HDFS中数据以Block进行存储,Map阶段读取数据文件时,首先会对文件进行Split分片,Split切片默认与一个block大小相等,block是物理切分,split是逻辑切分,也就是说split大小是通过offset范围来决定每个split大小,而非真正的文件切分。Split可以人为调整大小,如果要调整split的大小可以通过调节mapreduce.input.fileinputformat.split.minsize或者mapreduce.input.fileinputformat.split.maxsize参数,假设想要调节Split大小为100M,那么就设置mapreduce.input.fileinputformat.split.maxsize为100M即可,如果要调节Split为200M,那么就设置mapreduce.input.fileinputformat.split.minsize为200M即可
数据块(Block)的大小通过参数dfs.blocksize设置
相关文章:
MapReduce处理数据流程
(一)Shuffle MapReduce中的Shuffle过程指的是在Map方法执行后、Reduce方法执行前对数据进行分区排序的阶段 (二)处理流程 1. 首先MapReduce会将处理的数据集划分成多个split,split划分是逻辑上进行划分,…...
基于springboot的教务系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 这些年随着Internet的迅速发展,我们国家和世界都已经进入了互联网大数据时代,计算机网络已经成为了整个社会以及经济发展的巨大动能,各个高校的教务工作成为了学校管理事务的重要目标和任务,因此运用互联网技术来提高教务的…...
潮流霓虹酸性渐变液体流体扭曲颗粒边缘模糊JPG背景图片设计素材 Organic Textures Gradients Collection
这个系列将液体运动、霓虹灯和热浪扭曲提炼成一组有机纹理。渐变像水面上的油一样荡漾,模糊了科幻小说与自然之间的界限。这种未来主义的边缘,加上近乎生物的感觉,与正在进行的抽象数字超现实主义浪潮完美同步。 这套具有 20 种原始纹理和 20…...
现代时尚标签海报包装网站设计几何风PSAI无衬线英文字体安装包 Matahari Sans Font Family
Matahari(英语:Sun)是生命的动力源泉。与日常生活的其他部分协同作用的力量和能量的象征。这是我们人类需要的最基本的东西之一,就像交流一样。就像 Matahari 本身一样,文字的力量足以维持生计。 参考怪诞字体并受到埃…...
Spring MVC响应数据
handler方法分析 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用RequestMapping/GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: handler作用总结:* 1.接收请求参数(param,json,pathVariable,共享域等…...
jmeter验证正则表达式提取值是否正确
正则提取 验证提取是否正确...
共注意力机制及创新点深度解析
一、核心原理剖析 1. 基本思想 共注意力机制(Co-Attention)通过建立双向注意力交互通道,同步学习图像和问题两个模态的关键信息。与传统单向注意力相比,其核心创新在于: 双向信息流:图像特征和问题特征…...
联想台式电脑启动项没有U盘
开机按F12,进入启动设备菜单,发现这里没有识别到插在主机的U盘? 解决方法 1、选上图的Enter Setup或者开机按F2,进入BIOS设置 选择Startup -> Primary Boot Sequence 2、选中“Excludeed from boot order”中U盘所在的一行 …...
基于 Python 爬取 TikTok 搜索数据 Tiktok爬虫(2025.3.17)
1. 前言 在数据分析和网络爬虫的应用场景中,我们经常需要获取社交媒体平台的数据,例如 TikTok。本篇文章介绍如何使用 Python 爬取 TikTok 用户搜索数据,并解析其返回的数据。 结果截图 2. 项目环境准备 在正式运行代码之前,我…...
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解 (图1-1) 一、鸿蒙中App、HAP、HAR、HSP是什么? (1)App Pack(Application Package) 是应用发布的形态,上架应用市场是以App Pa…...
计算机二级MS之Excel
声明:跟着大猫和小黑学习随便记下一些笔记供大家参考,二级考试之前将持续更新,希望大家二级都能轻轻松松过啦,过了二级的大神也可以在评论区留言给点建议,感谢大家!! 文章目录 考题难点&#x…...
Unity导出WebGL,无法加载,data文件无法找到 404(NotFound)
问题:data文件无法找到404Not found 示例是使用IIS托管启动 F12可以看到not found 的报错 解决办法: iis无法识别data文件,在MIME类型中增加data 类型:application/octet-stream 添加之后,会在根目录下生产一个…...
洛谷题目: P1225 黑白棋游戏 题解 (本题难)
题目传送门: P1225 黑白棋游戏 - 洛谷 (luogu.com.cn) 前言: 这道题要求我们找出从黑白棋游戏的初始棋盘状态变化到目标棋盘状态的最短着棋序列,也就是要找到最少的交换相邻方格棋子的步数以及每一步具体的交换位置。我们可以使用广度优先…...
网络安全技术分析:攻防演进、核心技术与未来挑战
本文系统梳理网络安全技术发展脉络,聚焦漏洞利用、威胁检测、数据保护三大核心领域,结合APT攻击、勒索软件、零日漏洞等典型案例,解析防火墙、IDS、零信任架构等技术原理。通过分析2023年全球重大安全事件(如MOVEit漏洞攻击、Lock…...
SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题
文章引用:https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值,访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…...
通过Typora + PicGo + 阿里云对象存储(OSS)实现图床
文章目录 通过Typora PicGo 阿里云对象存储(OSS)实现图床1 准备工作1.1 阿里云对象存储 OSS配置创建oss存储空间bucket获取AccessKey 1.2 PicGo配置1.3 Typora配置 2 使用流程3 常见问题和解决3.1 创建asesskey3.2 You have no right to access this o…...
爱普生FC-12M石英晶体谐振器精准时钟源解决方案
在当今数字化时代,电子设备无处不在,从我们日常使用的智能手机、平板电脑,到复杂的工业控制系统、通信基站,每一台设备的稳定运行都离不开精准的时钟信号。而在众多提供时钟信号的元件中,爱普生 FC-12M 石英晶体谐振器…...
【css酷炫效果】纯CSS实现手风琴折叠效果
【css酷炫效果】纯CSS实现手风琴折叠效果 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492015 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&am…...
AI辅助的逆向分析
AI大模型结合反编译工具与AI的辅助分析能力,已能实现部分代码逻辑的还原与重构。 1. 技术实现路径 (1)二进制文件预处理与反编译 反编译工具:需先使用IDA Pro、Ghidra等工具将二进制文件转换为低级中间表示(如汇编代…...
物理标签与逻辑标签的区别
物理标签和逻辑标签都可以被机器(如浏览器、爬虫、屏幕阅读器)解析和识别,但它们的 语义信息 对机器的意义不同。以下是详细解释: 1. 物理标签的解析 可以识别:浏览器会正确解析物理标签(如 <b>、<…...
脚本语言 Lua
概念 Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易地被C/C 代码调用,也可以反过来调用C/C的函数,这使得Lua在应用程序中可以被广泛应用。Lua并没有提供强大的库,它是不适合作为开发独立应…...
《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》
一、系统概述 本系统是一个基于 TCP 协议的多人聊天系统,由一个服务器和多个客户端组成。客户端可以连接到服务器,向服务器发送消息,服务器接收到消息后将其转发给其他客户端,实现多人之间的实时聊天。系统使用 C 语言编写&#x…...
目前主要虚拟世界平台在单一实例承载人数和伺服器架构的综合比较分析(从开资料和技术推估):
目前主要虚拟世界平台在单一实例承载人数和伺服器架构的综合比较分析(从开资料和技术推估): 1. 《Fortnite》(Epic Games) 一般游戏模式约 100人/场,但大型活动(如演唱会)采用分层串…...
鸿蒙NEXT项目实战-百得知识库04
代码仓地址,大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点: 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…...
函数的介绍
1.函数的概念 在C语言中也有函数的概念,有些翻译为:子程序,这种翻译更为准确。C语言的函数就是一个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。 C语言的程序其实是有无数个小的函数组合而成的,也可以…...
源自Deformable Convolutional Networks的一种可变形卷积实现解析
衍生记录:深度学习pytorch之简单方法自定义9类卷积即插即用 文章目录 概述1. 可变形卷积的背景2. DeformConv2D概述2.1 构造函数分析2.2 前向传播函数解析2.2.1 偏移量的计算与应用2.2.2 目标位置的计算2.2.3 四个角的插值2.2.4 双线性插值的权重2.2.5 特征图的采样…...
记一次性能调优-20250320
2月份年后上班,刚过完年,还没从喜悦中解放出来,凌晨3点的时候同事就给我打电话,晚上的批量处理任务卡住了,快帮忙看看,做了几分钟的心里建设之后从被窝爬起来,看着手机上好几电话,赶…...
Postman高级功能深度解析:Mock Server与自动化监控——构建高效API测试与监控体系
引言:Postman在API开发中的核心价值 在数字化时代,API(应用程序编程接口)已成为系统间交互的“神经网络”,其质量直接影响用户体验与业务连续性。然而,传统API测试面临两大挑战: 开发阶段依赖…...
【最后203篇系列】020 rocksdb agent
今天还是挺开心的一天,又在工具箱里加了一个工具。嗯,但是快下班的时候也碰到一些不太顺心的事,让我有点恼火。我还真没想到一个专职的前端,加测试,以及其他一堆人,竟然不知道后端返回的markdown,在前端渲染…...
OpenCV旋转估计(2)用于自动检测波浪校正类型的函数autoDetectWaveCorrectKind()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::autoDetectWaveCorrectKind 是 OpenCV 中用于自动检测波浪校正类型的函数,它根据输入的旋转矩阵集合来决定使用哪种波浪…...
