Hadoop MapReduce 核心流程:从 Input 到 Reduce
MapReduce 是分而治之的分布式计算模型分为两大阶段Map 阶段映射和Reduce 阶段归约中间由 Shuffle 洗牌过程衔接。整体流程输入分片 → Map任务 → Shuffle分区、排序、合并 → Reduce任务 → 输出结果1. Input 输入阶段把 HDFS 上的输入文件按块切分成InputSplit 输入分片。分片是逻辑划分不等于 HDFS 块。每个分片对应 1 个 Map Task。RecordReader 读取分片解析成key,value键值对传给 map 函数。key通常是偏移量value一行原始数据。2. Map 阶段并行map task用户自定义map()函数处理输入的k1,v1输出中间结果k2,v2。map 输出不会直接写 HDFS先写入内存环形缓冲区。缓冲区满后溢写到本地磁盘生成溢写 spill 文件溢写时执行分区 partition、局部排序 sort。多次溢写会产生多个 spill 文件map 任务结束时执行merge 合并生成 map 最终的本地输出文件。map 输出在本地磁盘不是 HDFS3. Shuffle 洗牌阶段【MR 核心最容易发生数据倾斜】作用把 map 输出数据按照 key 分发到对应 Reduce。分为Map 端 shuffle和Reduce 端 shuffle。Map 端Partition 分区根据 key 计算分区号决定这条数据交给哪个 Reduce。默认 HashPartitionerkey.hashCode() % reduceNum。分区 排序写出 spill 溢写文件最后合并成有序分区文件。Reduce 端Fetch 拉取各个 Reduce Task 通过 HTTP拉取所有 Map 节点上属于自己分区的数据。拉取的数据一部分放内存多了溢写到磁盘。Merge 归并排序把来自不同 map 的多个文件合并成全局有序的数据流。排序完成后相同 key 的所有 value 会聚合在一起交给 reduce 函数。⚠️ 数据倾斜根源hash 分区时某一个 key 数量巨大全部落到同一个 reduce导致单个 reduce 处理量暴涨。4. Reduce 阶段用户自定义reduce(k2, 迭代器v2)接收同一个 key 的全部 value 集合。执行业务逻辑处理。reduce 输出k3,v3写入 HDFS 输出目录。reduce 输出直接写 HDFS写的是最终结果。5. 精简文件切分片分片启 Mapmap 输出写缓冲区溢写磁盘分区排序shuffle 阶段 reduce 拉取各 map 的分区数据归并排序相同 key 聚合执行 reduce 函数结果输出 HDFS。关键要点Map 输出存本地磁盘Reduce 输出存HDFS。Shuffle 包含分区、排序、溢写、合并、拉取。排序是 MR 固有特性shuffle 过程一定会排序。分区规则决定数据去到哪个 reduce分区不合理就会数据倾斜。map task 数量由输入分片数决定reduce task 数量用户指定。简易流程图文字版HDFS输入文件 ↓ 切InputSplit MapTask 并行执行 ↓ map()输出 k2,v2 环形缓冲区 → spill溢写(分区排序) → merge合并本地文件 ↓ Shuffle ReduceTask 远程拉取对应分区数据 → merge归并排序 ↓ reduce(k,values) HDFS输出目录常见问题MapTask 数量由什么决定由输入分片 InputSplit 数量以及文件大小、块大小共同决定。ReduceTask 数量设置有什么影响0没有 reduce 阶段只跑 map。太少少数 reduce 压力大容易倾斜。太多产生大量小输出文件namenode 压力大。Shuffle 一定会排序吗MR 默认 shuffle 一定会对 key 排序如果不需要排序用 Spark 可以避免。数据倾斜发生在哪个阶段Shuffle 阶段分区后大量相同 key 落到同一个 reduce。

相关新闻

artcraft式创作工具:从意图解析到资产生成的工程实践

artcraft式创作工具:从意图解析到资产生成的工程实践

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个词,我脑子里蹦出来的不是某个具体工具,而是一种很朴素的组合感——art 加上 craft,艺术加手艺。这两个词放在一起,本身就带着一种张力&…

2026/10/13 3:01:43 阅读更多 →
精读原型网络:从少样本学习到类均值分类器的度量学习基石

精读原型网络:从少样本学习到类均值分类器的度量学习基石

最近在整理少样本学习(few-shot learning)方向的文献时,我重新精读了《Prototypical Networks for Few-shot Learning》这篇论文。它发表于2017年底,属于度量学习路线里绕不开的基石工作。整篇论文的思想非常朴素:用每…

2026/10/13 3:00:43 阅读更多 →
kernel的参考链接

kernel的参考链接

官网:https://www.kernel.org/ 官方文档:https://docs.kernel.org/ 在线代码:https://elixir.bootlin.com/ https://chenweixiang.github.io/2019/01/18/linux-kernel-reading.html Linux SMP启动罗曼史(上)&#xff…

2026/10/13 3:00:43 阅读更多 →

最新新闻

Socket编程预备:网络分层、TCP/UDP与字节序的底层思维框架

Socket编程预备:网络分层、TCP/UDP与字节序的底层思维框架

我见过太多人抱着《Unix网络编程》硬啃,代码敲了一百多行,却连bind()为什么有时要写地址、有时可以写INADDR_ANY都说不清。这不是代码量不够,而是缺了 socket 编程开始的“预备”环节。很多人把“预备”理解成装个 Linux、装好编译环境&#…

2026/10/13 3:41:54 阅读更多 →
Kettle 9.3 实战指南:安装配置、数据库连接、转换调度与避坑

Kettle 9.3 实战指南:安装配置、数据库连接、转换调度与避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:41:54 阅读更多 →
BERT多卡训练实战:从硬件配置到PyTorch DDP加速全指南

BERT多卡训练实战:从硬件配置到PyTorch DDP加速全指南

我最早接触 BERT 训练是在一块 16GB 显存的显卡上跑的,batch size 调到 4 就开始爆显存,那会儿我还以为是代码写得不对。后来把整机升级成多 GPU 服务器、用 PyTorch 的分布式训练把 BERT-base 训起来之后,才真正理解这类模型为什么"吃显…

2026/10/13 3:41:54 阅读更多 →
学校工资管理系统数据库设计实战指南

学校工资管理系统数据库设计实战指南

简介:本资源是一份面向高校数据库原理及应用课程学习者的高分课程设计实践材料,聚焦学校工资管理系统的完整开发实现,适用于数据库设计、SQL Server应用及课程设计报告撰写等教学场景。压缩包共3个文件,含1份详尽的Word版课程设计…

2026/10/13 3:41:54 阅读更多 →
AI模型路由实战:用星链4SAPI化解大模型调用成本失控

AI模型路由实战:用星链4SAPI化解大模型调用成本失控

上个月看到账单的时候,我整个人是懵的。调用次数只比上上个月涨了 12%,费用却翻了将近一倍。一开始我以为是模型厂商在悄悄调价,拉出明细一看才发现,问题根本不在单价,而在于所有请求无差别地打向了同一个高配模型&…

2026/10/13 3:41:54 阅读更多 →
以太坊智能合约可升级性实战:代理模式、存储布局与UUPS升级方案详解

以太坊智能合约可升级性实战:代理模式、存储布局与UUPS升级方案详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:40:54 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →