MapReduce到底是个啥?

在聊 MapReduce 之前不妨先看个例子:假设某短视频平台日活用户大约在7000万左右,若平均每一个用户产生3条行为日志:点赞、转发、收藏;这样就是两亿条行为日志,再假设每条日志大小为100个字节,那么一天就会产生将近20个GB左右的数据;

面对这么大的数据量,如何对这些数做一些统计分析呢?

Java为例:如果写一个程序,从一个近20个GB的日志文件里,一条一条读取日志并计算,直到两亿数据全部计算完毕,你认为会花费多长时间?

不妨做个实验,随机生产从0到100的数字,并将其写入文件当中,最终生成一个大小为20个GB左右的文件:

public void generateData() throws IOException {File file = new File("D:\\微信公众号\菜鸟进阶站.txt");if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}BufferedWriter bos = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));for (long i = 1; i < Integer.MAX_VALUE * 3.4; i++) {String data = String.valueOf(random.nextInt(100)+1);bos.write(data);if (i % 1000000 == 0) {bos.write("\n");}}bos.close();
}

使用代码来统计哪一个数字出现的次数最多(执行过程忘记截图了),最后得出结论:整个统计过程大概用了12分钟左右;目前还仅仅是 GB级别,如果是 TB、PB呢?

作为科技巨头的大佬:Google(谷歌)对该问题给出了答案;

谷歌从2003年到2006年先后发表了三篇论文:GFS、MapReduce和Big Table。俗称三架马车,也正是这三驾马车正式打开了大数据的大门;今天我们主要聊一聊其中的MapReduce

该模型可以让开发者不用去考虑复杂的分布式架构,使得编写分布式代码就像单机版一样简单,自动将大任务拆分成小任务,分发到不同的机器上面进行并行计算;

简单来说 MapReduce的核心思想就是分而治之;

说到分而治之,就让我想起来小时候语文老师给我们的留的作业,抄写鲁迅的所有文章。这工作量可算是巨大的了;

为了能按时提交作业,我便将作业撕成了3份,张三一份、李四一份、王五一份;让他们分别区抄写其中的一部分,最后由我将3份作业订装在一起交给老师;这整个过程中:将作业撕开分别交给3个人便是 Map,最后我把作业组装起来便是 Reduce

上述过程只是一个笼统的概念。细的说,其实 MapReduce 大致话可以分为 Map、shuffle、Reduce 3个过程:

首先根据数据量大小,生产多个 Map任务,每个 Map任务会读取原数据并进行逻辑处理,最终生产一个 KV键值对;同时对每条数据根据 key 的值计算所属分区,并打上一个逻辑标识,用来决定改数据回去到哪一个 Reduce

Shuffle 过程包含在 MapReduce 的两端,Map 端的 Shuffle 会对数据进行一个排序,得到一个有序的文件,该文件按照分区排序,并且每个分区内部的键值对都按照 Key 的值进行升序排序;Reduce 端的 Shuffle,会去拉取属于自己分区的数据,并进行一个合并排序; Reduce 端根据业务需求,会对数据做进一步的处理并输出结果;

从上述过程中可以看出,Reduce 数量也就是分区的数量,分区相同的数据会经过 Shuffle 到达同一个 Reduce 当中;

WordCount 为例,该程序用来统计每个单词出现的次数:现在假设有份巨大的文件,我们将该文件进行切分,切分成三个 Map 任务,每个 Map 会对每行的内容按空格切分,每切下一个单词我们就将其组成一个 KV 键值对,其中 Key 代表这个单词 ,Value 代表该单词出现的次数;

Map端切分

由于我们的目标是统计每个单词出现的次数,因此我们只需要一个 Reduce 即可,在经过 MapShuffle 排序后,在每个 Map 端会生成一个有序的文件;

MapShuffle

Reduce 端的 Shuffle 会去拉取属于自己分区的数据,并作为一个合并排序,最后 Reduce 会遍历每个单词对于的数组进行累加,并进行结果的直接输出;

Reduce端

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

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

相关文章

Error: llama runner process has terminated: exit status 0xc0000409 问题解决办法

在大模型部署过程中&#xff0c;格式转换环节若使用了高版本的 llama.cpp 库&#xff0c;而系统当前运行的版本较低&#xff0c;就会出现版本不兼容的情况。 这种不匹配会阻碍模型的正常运行&#xff0c;进而导致报错。建议你密切关注模型所需的版本要求&#xff0c;及时将系统…

代码随想录-训练营-day20

今天我们继续回溯&#xff1a; 39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 这个题和我们之前的组合题相比&#xff0c;最大的区别在于我们可以无限次的重复取用某值了&#xff0c;这就让我们的递归参数与之前不同&#xff0c;除此之外&#xff0c;本质上这个题与21…

寒假集训思维训练5题解

A - Full House 2 简单来说就是判断题&#xff0c;可以用讨论&#xff0c;也可以用数组来统计再枚举 #include<bits/stdc.h> using namespace std; int vis[20]; int main() {int x;for(int i1;i<4;i){cin>>x;vis[x];}//3 2 - > 3 1 2 2fo…

ubuntu 本地部署deepseek r1 蒸馏模型

本文中的文件路径或网络代理需要根据自身环境自行删改 一、交互式chat页面 1.1 open-webui 交互窗口部署&#xff1a;基于docker安装&#xff0c;且支持联网搜索 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离线操作。它支持各种 LLM…

数据库 绪论

目录 数据库基本概念 一.基本概念 1.信息 2.数据 3.数据库&#xff08;DB&#xff09; 4.数据库管理系统&#xff08;DBMS&#xff09; 5.数据库系统&#xff08;DBS&#xff09; 二.数据管理技术的发展 1.人工管理阶段 2.文件系统阶段 3.数据库系统阶段 4.数据库管…

HTML5 新特性有哪些?

HTML5 引入了许多新特性&#xff0c;主要包括以下几类&#xff1a; 语义化标签&#xff1a;如 <header>、<nav>、<article>、<section>、<aside>、<footer> 等&#xff0c;使代码结构更清晰&#xff0c;利于搜索引擎优化和代码维护。表单…

微软编程之C#如何学习,C#学习路线:从入门到精通

引言 C# 是一种由微软开发的面向对象编程语言&#xff0c;广泛应用于 Windows 应用程序开发、游戏开发&#xff08;Unity&#xff09;、Web 开发&#xff08;ASP.NET&#xff09;等领域。对于初学者来说&#xff0c;掌握 C# 不仅能够打开编程世界的大门&#xff0c;还能为未来…

数据中台是什么?:架构演进、业务整合、方向演进

文章目录 1. 引言2. 数据中台的概念与沿革2.1 概念定义2.2 历史沿革 3. 数据中台的架构组成与关键技术要素解析3.1 架构组成3.2 关键技术要素 4. 数据中台与其他平台的对比详细解析 5. 综合案例&#xff1a;金融行业数据中台落地实践5.1 背景5.2 解决方案5.3 成果与价值 6. 方向…

【DeepSeek】DeepSeek概述 | 本地部署deepseek

目录 1 -> 概述 1.1 -> 技术特点 1.2 -> 模型发布 1.3 -> 应用领域 1.4 -> 优势与影响 2 -> 本地部署 2.1 -> 安装ollama 2.2 -> 部署deepseek-r1模型 1 -> 概述 DeepSeek是由中国的深度求索公司开发的一系列人工智能模型&#xff0c;以其…

如何使用C++将处理后的信号保存为PNG和TIFF格式

在信号处理领域&#xff0c;我们常常需要将处理结果以图像的形式保存下来&#xff0c;方便后续分析和展示。C提供了多种库来处理图像数据&#xff0c;本文将介绍如何使用stb_image_write库保存为PNG格式图像以及使用OpenCV库保存为TIFF格式图像。 1. PNG格式保存 使用stb_ima…

查出 product 表中所有 detail 字段包含 xxx 的完整记录

您可以使用以下 SQL 查询语句来查出 product 表中所有 detail 字段包含 oss.kxlist.com 的完整记录&#xff1a; SELECT * FROM product WHERE INSTR(detail, oss.kxlist.com) > 0;下面是detail字段包含的完整内容 <p><img style"max-width:100%;" src…

微服务 day01 注册与发现 Nacos OpenFeign

目录 1.认识微服务&#xff1a; 单体架构&#xff1a; 微服务架构&#xff1a; 2.服务注册和发现 1.注册中心&#xff1a; 2.服务注册&#xff1a; 3.服务发现&#xff1a; 发现并调用服务&#xff1a; 方法1&#xff1a; 方法2&#xff1a; 方法3:OpenFeign OpenFeig…

Shell原理简介与Linux中的权限问题

一、Shell命令及运行原理 1.1通常说的计算机体系结构指的是什么 通常意义上的计算机体系结构指的是芯片&#xff1a; 如锐龙amd&#xff0c;英特尔酷睿intel core 他们分为 x86&#xff1a;32位 x86_64&#xff1a;64位 两种 1.2广义上的Linux系统分为哪些部分&#xf…

在rtthread中,scons构建时,它是怎么知道是从rtconfig.h找宏定义,而不是从其他头文件找?

在rtthread源码中&#xff0c;每一个bsp芯片板级目录下都有一个 SConstruct scons构建脚本的入口&#xff0c; 在这里把rtthread tools/目录下的所有模块都添加到了系统路径中&#xff1a; 在tools下所有模块中&#xff0c;最重要的是building.py模块&#xff0c;在此脚本里面…

C# Winform 使用委托实现C++中回调函数的功能

C# Winform 使用委托实现C中回调函数的功能 在项目中遇到了使用C#调用C封装的接口&#xff0c;其中C接口有一个回调函数的参数。参考对比后&#xff0c;在C#中是使用委托(delegate)来实现类似的功能。 下面使用一个示例来介绍具体的使用方式&#xff1a; 第一步&#xff1a;…

【系统架构设计师】体系结构文档化

目录 1. 说明2. 重要性3. 主要内容4. 编写原则5. 实践建议6. 例题6.1 例题1 1. 说明 1.绝大多数的体系结构都是抽象的&#xff0c;由一些概念上的构建组成。2.层的概念在任何程序设计语言中都不存在。3.要让系统分析员和程序员去实现体系结构&#xff0c;还必须将体系结构进行…

嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?

2025年&#xff0c;全球AI领域最震撼的突破并非来自算力堆叠的超级模型&#xff0c;而是中国团队DeepSeek通过开源策略&#xff0c;推动大模型向微型化、低功耗场景的跨越。相对于当人们还在讨论千亿参数模型的训练成本被压缩到600万美金而言&#xff0c;被称作“核弹级别”的操…

深度学习之神经网络框架搭建及模型优化

神经网络框架搭建及模型优化 目录 神经网络框架搭建及模型优化1 数据及配置1.1 配置1.2 数据1.3 函数导入1.4 数据函数1.5 数据打包 2 神经网络框架搭建2.1 框架确认2.2 函数搭建2.3 框架上传 3 模型优化3.1 函数理解3.2 训练模型和测试模型代码 4 最终代码测试4.1 SGD优化算法…

机器学习之心的创作纪念日

机缘 今天&#xff0c;是我成为创作者的第1460天。 在这段时间里&#xff0c;获得了很大的成长。 虽然日常忙碌但还在坚持创作、初心还在。 日常 创作已经成为我生活的一部分&#xff0c;尤其是在我的工作中&#xff0c;创作是不可或缺的&#xff0c;创作都是核心能力之一。…

【RabbitMQ重试】重试三次转入死信队列

以下是基于RabbitMQ死信队列实现消息重试三次后转存的技术方案&#xff1a; 方案设计要点 队列定义改造&#xff08;核心参数配置&#xff09; Bean public Queue auditQueue() {Map<String, Object> args new HashMap<>();args.put("x-dead-letter-exchan…