【大数据2025】MapReduce

MapReduce 基础介绍

  • 起源与发展:是 2004 年 10 月谷歌发表的 MAPREDUCE 论文的开源实现,最初用于大规模网页数据并行处理,现成为 Hadoop 核心子项目之一,是面向批处理的分布式计算框架。
  • 基本原理:分为 map 和 reduce 两个阶段。map 阶段将计算任务分发到数据节点并行运算,各节点得出部分结果;reduce 阶段汇总部分结果得到最终结果,体现分而治之与并行运算思想,遵循计算跟着数据走、移动计算而非数据的原则。

MapReduce 特点

  • 计算与数据关系:计算任务移动到数据所在节点,数据不动,降低分布式编程门槛。
  • 扩展性:具有良好扩展性,随着节点增加,存储和计算能力近乎线性递增。

MapReduce 适用场景

  • 离线批处理任务:适合海量数据离线批处理,如数据统计(PVUV 统计)、搜索引擎索引构建、海量数据查询、复杂数据分析算法实现等。

MapReduce 不适用场景

  • 实时性要求高的场景:不适合毫秒或秒级返回结果的场景,如 OLAP、流计算,因其计算效率达不到实时性要求,且无法处理无界数据集和支持实时计算模式。
  • DAG 运算场景:不能进行有向无环图(DAG)运算,由于中间结果需落盘、读盘和网络传输,导致延迟高、效率低。

MapReduce 与 Spark 在 DAG 运算上的对比

  • MapReduce 的劣势:做 DAG 运算慢,中间结果落盘、读盘和网络传输过程繁琐,效率低。
  • Spark 的优势:支持 DAG 运算,数据存于内存,可直接将结果给到下一个任务计算,速度快,但存在内存不足问题。

MAPREDUCE 作业运行原理与词频统计示例

  • 以词频统计展示 MAPREDUCE 作业运行原理,即统计英文文本中单词出现频率。
  • 若文本存于 HDFS,其自动进行 split 操作;若未存于 HDFS,则按 128 兆一块进行数据块拆分,每个数据块启动一个 map task。

map 任务处理过程

  • map task 将每行文本按空格拆分单词,把单词作为 K,给每个单词标 value 值为 1,形成 K-V 形式中间结果。

reduce 节点聚合操作

  • 把相同 K 的数据分发到同一个 reduce 节点进行聚合,将相同 K 的 value 值累加得到最终词频结果,其中难点在于如何把相同 K 分发到同一 reduce,此过程需经过 shuffle(洗牌)阶段。

哈希取模分发机制

  • shuffle 阶段通过哈希取模实现分发,先将字符串形式的 K 进行数字编码,再对 reducer 个数进行哈希取模(即转换后的数字除以 reducer 个数取余数),余数对应相应的 reduce 节点,以此保证相同 K 能聚合到同一 reducer。

生产中 reduce 个数设置

  • 生产中 reduce 个数可手动指定,实际应用中可能不像示例中有较多 reduce,如可能只有两个 reduce,此时单词会按哈希取模结果分发到这两个 reduce 中进行处理。

map reduce 执行流程

  • 文件拆分与 map 任务启动:文件上传至 HDFS 后会自动进行 split,拆分成多个 block,每个 block 启动一个 map 任务。
  • map 任务处理与分组:map 任务处理数据得到 key-value 结果,并依据 key 对 reduce 个数进行哈希取模分组。例如有三个 reduce,则按对三取模结果分为三组。
  • reduce 任务拉取与处理:reduce 任务启动 fetch 线程,从各 map 拉取对应组数据,将来自多个地方的同组数据合并为一个大文件后,对文件按 key 进行 reduce 处理(如词频统计中对相同 key 的 value 累加求和),每个 reducer 会输出一个结果文件存于同一目录下,这些文件总和即为最终结果。

执行阶段划分

  • 按任务划分:分为 map task 和 reduce task。
  • 按运行阶段划分:包括 split 阶段、shuffle 阶段、reduce 阶段及输出阶段。其中 shuffle 阶段由 map task 和 reduce task 共同完成,map task 负责对内存缓存区(100 兆,达 80%即 80 兆时触发)的数据进行分组排序并落盘,可能产生多个小文件后再合并成大文件;reduce task 从 map 拉取数据到缓存(有阈值,超阈值也会落盘),同样要对数据合并、分组排序后再进行 reduce 处理。

shuffle 阶段详细分析

  • map 端操作:map 运算结果存放在 100 兆内存缓存区,达到 80 兆时触发溢写到磁盘,同时进行分组排序,根据 reduce 个数哈希取模分组并在组内排序,多次溢写会生成多个分组有序小文件,最后需合并成大的分组有序文件。
  • reduce 端操作:reduce 启动 fetch 线程从 map 拉取数据到缓存,缓存达到阈值后溢写生成小文件,再合并成大文件并进行分组排序(按 K 值分组排序),最后对分组有序文件进行 reduce 处理。
  • 效率问题:shuffle 阶段是 map reduce 执行慢的关键。其在 map 和 reduce 过程中大量数据落盘,且 reduce 拉取数据时存在大量网络传输,内存缓存使用量小(仅几百兆),频繁与磁盘交互及网络传输导致整体效率低下。

作业提交与运行

  • 提交方式 :使用 hadoop -jar 命令提交作业,需指定 jar 包名称及要运行的主类名,并可添加参数。例如,官方示例包中运行 MAREDUCE 作业统计π值时,需按此方式提交。
  • 作业管理 :通过 yarn application - list 查看作业运行情况,用 yarn application -kill 取消作业。

作业运行监控

  • 运行状态显示 :作业提交后会生成作业 id,运行时控制台会实时显示 map 和 reduce 的进度信息。需注意,按 CTRL + C 只能中断控制台输出,无法终止后台作业。
  • 可视化监控 :可访问yarn集群主节点的 8088 端口进入可视化监控页面,在 applications 中找到正在运行的作业,点击作业 id 查看详细运行情况。

日志查看与排错

  • 查看途径 :除可视化界面外,可在作业运行节点查找日志。运维人员可登录节点,依据 yarn node manager 相关配置找到日志存储目录(通常在 log 目录下),查看作业输出日志以分析运行状况。普通用户一般通过可视化界面查看日志。
  • 排错方法:从日志信息中排查和解决作业运行问题。
相关推荐
24k小善20 分钟前
FlinkSql入门与实践
java·大数据·flink·云计算
Leo.yuan21 分钟前
产销协同的作用是什么?又如何对各部门发挥作用?
大数据·信息可视化·数据分析·需求分析·企业数字化
帅帅的Python28 分钟前
2015-2023 各省 GDP 数据,用QuickBI 进行数据可视化——堆叠图!
大数据·人工智能
数据与人工智能律师1 小时前
正确应对监管部门的数据安全审查
大数据·网络·数据库·人工智能·区块链
Aloudata技术团队2 小时前
Aloudata Agent 36 问,深度解惑!
大数据·数据分析·数据可视化
星云ai2 小时前
2025年的营销趋势-矩阵IP
大数据·人工智能
TracyCoder1232 小时前
ElasticSearch深入解析(三):Elasticsearch 7的安装与配置、Kibana安装
大数据·elasticsearch·jenkins
一个数据大开发2 小时前
数据资产价值及其实现路径-简答题回顾
大数据·数据仓库·数据
南棱笑笑生4 小时前
20250426在ubuntu20.04.2系统上打包NanoPi NEO开发板的FriendlyCore系统刷机eMMC的固件
大数据·elasticsearch·搜索引擎
九河云4 小时前
中药企业数字化转型:从传统制造到智能制药的跨越
大数据·人工智能·科技·重构·制造