【大数据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 目录下),查看作业输出日志以分析运行状况。普通用户一般通过可视化界面查看日志。
  • 排错方法:从日志信息中排查和解决作业运行问题。

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

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

相关文章

主从复制

简述mysql 主从复制原理及其工作过程,配置一主两从并验证。 主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二…

【博客之星评选】2024年度前端学习总结

故事的开端...始于2024年第一篇前端技术博客 那故事的终末...也该结束于陪伴了我一整年的前端知识了 踏入 2025 年,满心激动与自豪,我成功闯进了《2024 年度 CSDN 博客之星总评选》的 TOP300。作为一名刚接触技术写作不久的萌新,这次能走到这…

Ubuntu 24.04 LTS 服务器折腾集

目录 Ubuntu 更改软件源Ubuntu 系统语言英文改中文windows 远程链接 Ubuntu 图形界面Windows 通过 openssh 连接 UbuntuUbuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locationsUbuntu 开启 SMB 服务,并通过 windows 访问Ubuntu安装Tailscale&am…

《TikTok停服:信息安全警钟长鸣》

一、TikTok 停服事件回顾 2025 年 1 月 18 日晚,TikTok 通知美国用户,由于美官方禁令于 19 日起生效,TikTok 软件将暂时对用户停止服务。这一消息犹如一颗重磅炸弹,瞬间在全球范围内掀起轩然大波。美国用户对此猝不及防&#xff0…

1166 Summit (25)

A summit (峰会) is a meeting of heads of state or government. Arranging the rest areas for the summit is not a simple job. The ideal arrangement of one area is to invite those heads so that everyone is a direct friend of everyone. Now given a set of tenta…

图论DFS:黑红树

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法&#xf…

C++,设计模式,【目录篇】

文章目录 1. 简介2. 设计模式的分类2.1 创建型模式(Creational Patterns):2.2 结构型模式(Structural Patterns):2.3 行为型模式(Behavioral Patterns): 3. 使用设计模式…

掌握提示词工程:大模型使用入门指南

掌握提示词工程:大模型使用入门指南 近年来,大语言模型(如 GPT、Claude 等)的强大能力令人印象深刻,但要想充分发挥这些模型的潜力,仅仅依靠其预训练能力还不够。提示词工程(Prompt Engineerin…

如何使用 useMemo 和 memo 优化 React 应用性能?

使用 useMemo 和 memo 优化 React 应用性能 在构建复杂的 React 应用时,性能优化是确保应用流畅运行的关键。React 提供了多种工具来帮助开发者优化组件的渲染和计算逻辑,其中 useMemo 和 memo 是两个非常有用的 Hook。本文将详细介绍这两个工具的使用方…

Agent Laboratory: Using LLM Agents as Research Assistants 论文简介

加速机器学习研究的智能实验室——Agent Laboratory 1. 引言 随着人工智能技术的飞速发展,机器学习领域正以前所未有的速度推进科学发现和技术创新。然而,传统的科学研究模式往往受到时间、资源和专业知识限制,阻碍了研究者们探索新想法的能…

【网络协议】【http】【https】ECDHE-TLS1.2

【网络协议】【http】【https】ECDHE-TLS1.2 ECDHE算法 1.客户端和服务器端事先确定好使用哪种椭圆曲线,和曲线上的基点G,这两个参数都是公开的, 双方各自随机生成一个随机数作为私钥d,并与基点 G相乘得到公钥Q(QdG)&#xff0c…

规避路由冲突

路由冲突是指在网络中存在两个或多个路由器在进行路由选择时出现矛盾,导致网络数据包无法正确传输,影响网络的正常运行。为了规避路由冲突,可以采取以下措施: 一、合理规划IP地址 分配唯一IP:确保每个设备在网络中都有…

项目实战--网页五子棋(游戏大厅)(3)

我们的游戏大厅界面主要需要包含两个功能&#xff0c;一是显示用户信息&#xff0c;二是匹配游戏按钮 1. 页面实现 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport"…

大模型UI:Gradio全解11——Chatbot:融合大模型的聊天机器人(4)

大模型UI&#xff1a;Gradio全解11——Chatbot&#xff1a;融合大模型的聊天机器人&#xff08;4&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.4 使用Blocks创建自定义聊天机器人11.4.1 简单聊天机器人演示11.4.2 立即响应和流式传输11.4.…

【线性代数】行列式的概念

d e t ( A ) ∑ i 1 , i 2 , ⋯ , i n ( − 1 ) σ ( i 1 , ⋯ , i n ) a 1 , i 1 a 2 , i 2 , ⋯ , a n , i n det(A) \sum_{i_1,i_2,\cdots,i_n } (-1)^{\sigma(i_1,\cdots,i_n)} a_{1,i_1}a_{2,i_2},\cdots, a_{n,i_n} det(A)i1​,i2​,⋯,in​∑​(−1)σ(i1​,⋯,in​)a1…

关于php语言api接口开发的流程

确定接口需求&#xff1a;首先明确接口的功能和需求&#xff0c;包括输入参数、输出结果以及接口的业务逻辑。 设计接口路由&#xff1a;根据接口需求&#xff0c;设计具体的接口路由&#xff0c;即URL路径&#xff0c;用于访问接口。 搭建PHP环境&#xff1a;确保你的服务器上…

STM32 FreeRTOS内存管理简介

在使用 FreeRTOS 创建任务、队列、信号量等对象时&#xff0c;通常都有动态创建和静态创建的方式。动态方式提供了更灵活的内存管理&#xff0c;而静态方式则更注重内存的静态分配和控制。 如果是1的&#xff0c;那么标准 C 库 malloc() 和 free() 函数有时可用于此目的&#…

【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键

文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识&#xff1…

国产编辑器EverEdit -重复行

1 重复行 1.1 应用场景 在代码或文本编辑过程中&#xff0c; 经常需要快速复制当前行&#xff0c;比如&#xff0c;给对象的多个属性进行赋值。传统的做法是&#xff1a;选中行-> 复制-> 插入新行-> 粘贴&#xff0c;该操作有4个步骤&#xff0c;非常繁琐。 那有没…

基于VSCode+CMake+debootstrap搭建Ubuntu交叉编译开发环境

基于VSCodeCMakedebootstrap搭建Ubuntu交叉编译开发环境 1 基于debootstrap搭建目标系统环境1.1 安装必要软件包1.2 创建sysroot目录1.3 运行debootstrap1.4 挂载必要的虚拟文件系统1.5 进入目标系统1.6 使用目标系统&#xff08;以安装zlog为例&#xff09;1.7 清理和退出 2 基…