当前位置: 首页 > news >正文

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

相关文章:

【大数据2025】MapReduce

MapReduce 基础介绍 起源与发展:是 2004 年 10 月谷歌发表的 MAPREDUCE 论文的开源实现,最初用于大规模网页数据并行处理,现成为 Hadoop 核心子项目之一,是面向批处理的分布式计算框架。基本原理:分为 map 和 reduce …...

Windows图形界面(GUI)-QT-C/C++ - Qt List Widget详解与应用

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 QListWidget概述 使用场景 常见样式 QListWidget属性设置 显示方式 (Display) 交互行为 (Interaction) 高级功能 (Advanced) QListWidget常见操作 内容处理 增加项目 删除项目…...

深度学习python基础(第二节) 分支语句和循环语句

本节主要介绍分支语句和循环语句的基本语法。 注意:在python中的作用域以缩进为准。有语言基础的很好理解,了解语法格式就可以。 布尔类型和比较运算符 # True真,False假 a True print(f"布尔变量a的内容是:{a},类型是:{type(a)}") 比较运算…...

Gin 源码概览 - 路由

本文基于gin 1.1 源码解读 https://github.com/gin-gonic/gin/archive/refs/tags/v1.1.zip 1. 注册路由 我们先来看一段gin代码,来看看最终得到的一颗路由树长啥样 func TestGinDocExp(t *testing.T) {engine : gin.Default()engine.GET("/api/user", f…...

第6章 ThreadGroup详细讲解(Java高并发编程详解:多线程与系统设计)

1.ThreadGroup 与 Thread 在Java程序中, 默认情况下, 新的线程都会被加入到main线程所在的group中, main线程的group名字同线程名。如同线程存在父子关系一样, Thread Group同样也存在父子关系。图6-1就很好地说明了父子thread、父…...

CentOS 7乱码问题如何解决?

1.使用超级用户操作: sudo su2.修改i18n配置文件: vi /etc/sysconfig/i18n将文件修改或添加为以下内容: LANG"zh_CN.UTF8" LC_ALL"zh_CN.UTF8"保存并退出(按Esc键,输入:wq,然后回车&#xff09…...

JavaScript语言的多线程编程

JavaScript语言的多线程编程 JavaScript是一种广泛使用的编程语言,主要用于网页开发。由于其单线程的特性,JavaScript 一直以来都有“无法进行多线程编程”的印象。尽管如此,随着技术的发展,JavaScript也逐渐引入了多线程的概念&…...

OpenSeaOtter使用手册-变更通知和持续部署

我们在OpenSeaOtter Server 0.1.1版本增加的镜像变更通知功能。通过镜像变更通知和OpenSeaOtter Agent就可以轻松获得持续部署能力。 镜像变更通知是通过push的方式下发到Agent的,Agent所在机器不需要外网地址。在Agent收到镜像变更通知后,就会调用对应的…...

(2)STM32 USB设备开发-USB虚拟串口

例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为USB虚拟串口教程,没有知识,全是实操,按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的,如果代码中出现一些外设的…...

他把智能科技引入现代农业领域

江苏田倍丰农业科技有限公司(以下简称“田倍丰”)是一家专注于粮油种植的农业科技公司,为拥有300亩以上田地的大户提供全面的解决方案。田倍丰通过与当地政府合作,将土地承包给大户,并提供农资和技术,实现利…...

ingress-nginx代理tcp使其能外部访问mysql

一、helm部署mysql主从复制 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo updatehelm pull bitnami/mysql 解压后编辑values.yaml文件,修改如下(storageclass已设置默认类) 117 ## param architecture MySQL archit…...

麒麟操作系统服务架构保姆级教程(十三)tomcat环境安装以及LNMT架构

如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 之前咱们学习了LNMP架构,但是PHP对于技术来说确实是老掉牙了,PHP的市场占有量越来越少了,我认识一个10年的PHP开发工程师,十年工资从15k到今天的6k&am…...

亚博microros小车-原生ubuntu支持系列:4-手部检测

一 准备工作 在学习手部检测之前,有2个准备工作。 1 确保小车的摄像头能显示画面 参见:亚博microros小车-原生ubuntu支持系列:2-摄像头控制-CSDN博客 启动图传代理: docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm …...

关于回调函数(callback)

简介 在C中,回调函数是一种常见的编程技术,它允许你将一个函数作为参数传递给另一个函数,并在适当的时候调用它。回调函数通常用于事件处理、异步编程和模块化设计中。 1、函数指针:在C中,回调函数通常是通过函数指针…...

Linux Bash 中使用重定向运算符的 5 种方法

注:机翻,未校。 Five ways to use redirect operators in Bash Posted: January 22, 2021 | by Damon Garn Redirect operators are a basic but essential part of working at the Bash command line. See how to safely redirect input and output t…...

硬件作品3----STM32F103RCT6最小系统板MCU配置

参考文章:对stm32F103RCT6原理图解析(详细)-CSDN博客 本想绘制稍微复杂一些的电路,但是出现很多问题,因此先绘制一块最小系统板进行原理、绘制方法的验证。 设计难度:★ 适合人群:初学者 一、…...

人脸识别打卡系统--基于QT(附源码)

逃离舒适区 项目源代码放在我的仓库中,有需要自取 项目地址 https://gitcode.com/hujiahangdewa/Face_recognition.git 文章目录 一、项目结构分析二、服务器的搭建三、客户端的搭建四、人脸识别库的申请五、基于人脸识别库的识别判断六、QT人脸识别----调用百度ai…...

【深度学习入门】深度学习知识点总结

一、卷积 (1)什么是卷积 定义:特征图的局部与卷积核做内积的操作。 作用:① 广泛应用于图像处理领域。卷积操作可以提取图片中的特征,低层的卷积层提取局部特征,如:边缘、线条、角。 ② 高层…...

通过视觉语言模型蒸馏进行 3D 形状零件分割

大家读完觉得有帮助记得关注和点赞!!!对应英文要求比较高,特此说明! Abstract This paper proposes a cross-modal distillation framework, PartDistill, which transfers 2D knowledge from vision-language models …...

机器学习10-解读CNN代码Pytorch版

机器学习10-解读CNN代码Pytorch版 我个人是Java程序员,关于Python代码的使用过程中的相关代码事项,在此进行记录 文章目录 机器学习10-解读CNN代码Pytorch版1-核心逻辑脉络2-参考网址3-解读CNN代码Pytorch版本1-MNIST数据集读取2-CNN网络的定义1-无注释版…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...