MapReduce处理数据流程

ops/2025/3/17 10:02:34/

(一)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。


http://www.ppmy.cn/ops/166460.html

相关文章

Mermaid 子图 + 拖拽缩放:让流程图支持无限细节展示

在技术文档、项目管理和可视化分析中&#xff0c;流程图是传递复杂逻辑的核心工具。传统流程图往往静态且难以适应细节展示&#xff0c;而 Mermaid 与 svg-pan-zoom 的结合&#xff0c;则为这一痛点提供了完美解决方案。本文将深入解析如何通过 Mermaid 的子图&#xff08;subg…

【从零开始学习计算机科学】软件工程(三)需求工程

【从零开始学习计算机科学】软件工程(三)需求工程 需求工程好的需求应具备的特征:需求工程(Requirement Engineering, RE)起始导出需求讨论会头脑风暴调查问卷场景分析法实地考察原型法精化协商规格说明确认需求管理需求工程 设计和开发一个计算机软件时,如果软件解决的…

在Spring Boot项目中接入DeepSeek深度求索,感觉笨笨的呢

文章目录 引言1. 什么是DeepSeek&#xff1f;2. 准备工作2.1 注册DeepSeek账号 3.实战演示3.1 application增加DS配置3.2 编写service3.3 编写controller3.4 编写前端界面chat.html3.5 测试 总结 引言 在当今快速发展的数据驱动时代&#xff0c;企业越来越重视数据的价值。为了…

Hive SQL 精进系列:一行变多行的 LATERAL VIEW EXPLODE

目录 一、引言二、LATERAL VIEW EXPLODE 概述2.1 基本概念2.2 单词解析2.2.1 LATERAL2.2.2 VIEW2.2.3 EXPLODE 三、语法详解3.1 基本语法结构3.2 完整语法示例&#xff08;针对映射情况&#xff09; 四、使用场景4.1 数组数据展开4.2 映射数据展开 五、案例分析5.1 展开数组示例…

css模拟雷达扫描动画

<div class"radar-scan"><div class"radar-container" /></div> 样式&#xff1a; .radar-scan {background-image: linear-gradient(0deg,transparent 24%,rgba(32, 255, 77, 0.15) 25%,rgba(32, 255, 77, 0.15) 26%,transparent 27%,…

从LLM出发:由浅入深探索AI开发的全流程与简单实践(全文3w字)

文章目录 第一部分&#xff1a;AI开发的背景与历史1.1 人工智能的起源与发展1.2 神经网络与深度学习的崛起1.3 Transformer架构与LLM的兴起1.4 当前AI开发的现状与趋势 第二部分&#xff1a;AI开发的核心技术2.1 机器学习&#xff1a;AI的基础2.1.1 机器学习的类型2.1.2 机器学…

NocoBase 本周更新汇总:双因素身份认证(2FA)

原文链接&#xff1a;https://www.nocobase.com/cn/blog/weekly-updates-202503013 汇总一周产品更新日志&#xff0c;最新发布可以前往我们的博客查看。 本周我们发布了 NocoBase 1.6.0 版本&#xff0c;带来集群模式部署、安全策略优化和迁移管理等多项新特性。 NocoBase …

C# NX二次开发:在多个体的模型中如何实现拉伸操作布尔减

大家好&#xff0c;今天接着上一篇拉伸文章去讲。 UF_MODL_create_extruded1 (view source) uf_list_p_tobjectsInputList of objects to be extruded.char *taper_angleInputTaper angle (in degrees).char *limit [ 2 ]InputLimit of extrusion. This is declared as: char …