MapReduce简介

news2025/1/24 2:11:17

MapReduce是一个编程模型,用于处理和生成大数据。用户通过编写Map函数处理输入键值对生成中间键值对,通过编写Reduce函数来合并所有的中间键值对并生成结果。在我们的日常生活中,大部分的任务都可以被抽象成一个MapReduce模型,并通过这个模型解决问题。

MapReduce介绍

我们所遇到的大多数计算问题都很直观,但是当计算的数量十分庞大时,我们往往要借助于成百上千的机器共同计算来加速这个过程,但在从一个机器拓展到一个集群时我们会遇到比原来多得多的问题。比如我们该如何并行化计算,如何把数据分发到机器中,如何处理机器宕机带来的问题,毫无疑问,这是一个复杂的问题。

分布式的计算带来了各种各样复杂的问题,但MapReduce的出现给解决分布式计算带来了一个足够简洁的解决方案。

编程模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6X2g7aX9-1681566844673)(https://skynesserblog.oss-cn-hangzhou.aliyuncs.com/Untitled%20(1)].png)整个计算过程接受一组输入键值对,并输出一组键值对。我们需要为这个计算过程提供两个函数,MapReduce

Map函数接受一组键值对输入并生产一组中间键值对,然后按照一定的标准把这些键值对分组并传输给Reduce函数。

Reduce函数接受中间键值对作为输入,合并这些数据并产生一组键值对作为最终输出。

一个简单的案例

下面是一个MapReduce实现的伪代码

map(String key, String value):
    // key: document name
    // value: document contents
    for each word w in value:
		EmitIntermediate(w, "1");
		
reduce(String key, Iterator values):
    // key: a word
    // values: a list of counts
    int result = 0;
    for each v in values:
    	result += ParseInt(v);
    Emit(AsString(result));

map函数获取文章中的每个单词,并简单的给每个key赋值为1,然后把这些结果提交给reduce函数,reduce函数合并相同的key,输出最终结果。

常见应用场景

  1. Distributed Grep:在大规模文本数据中查找指定的字符串,并输出匹配的行。Map 阶段将每个输入文件分割为多个块,Reduce 阶段将匹配的行进行汇总。

  2. Count of URL Access Frequency:统计 Web 日志中每个 URL 的访问频率,用于分析用户行为和网站性能。Map 阶段将每个日志文件解析为键值对,其中键为 URL,值为 1,Reduce 阶段将相同 URL 的值相加并输出。

  3. Reverse Web-Link Graph:将 Web 页面之间的链接关系转化为反向的页面到链接的关系,用于搜索引擎排名等应用。Map 阶段将每个页面解析为键值对,其中键为页面 URL,值为与该页面相连的 URL,Reduce 阶段将相同 URL 的值进行合并。

  4. Term-Vector per Host:为每个主机计算其包含的文本数据中每个单词的频率向量,用于文本分类和信息检索。Map 阶段将每个文档解析为键值对,其中键为主机名,值为单词和出现次数的列表,Reduce 阶段将相同主机名的列表进行合并。

  5. Inverted Index:为大规模文本数据建立倒排索引,用于支持全文搜索和相关性排序等应用。Map 阶段将每个文档解析为键值对,其中键为单词,值为文档 ID 和出现次数的列表,Reduce 阶段将相同单词的列表进行合并。

  6. Distributed Sort:对大规模数据进行排序,用于数据清洗、数据分析等应用。Map 阶段将输入数据分割为多个块,并对每个块进行内部排序,Reduce 阶段将多个有序块进行归并排序。

MapReduce实现

image-20230402194955138

执行流程

我们把输入分成M份的split,然后分配给worker执行map,在worker执行完毕后,我们整理worker的输出的中间键值对,根据Reduce分区的数量分为R份,然后再交给Reduce函数执行。

下面是具体的流程:

  1. 首先我们把输入分成M份,每一份的大小通常在16~64M范围内,这由用户设置。
  2. 然后master节点分配未完成的任务给空闲的节点。
  3. 被分配到map任务的节点处理输出的键值对,并将中间键值对保存在本地缓存中。
  4. 然后执行map任务的节点会定期将缓存中的内容写到磁盘,并将这些内容分成R个区域,然后将它们的位置发送给master。
  5. 当reduce节点被通知这些文件的位置,它会通过RPC来读取文件的内容从map节点中,等reduce节点读取完所有需要的内容,它会对中间键值对进行排序。
  6. 然后reduce节点会迭代这些键值对,并将它们合并,最终生成一个结果文件。
  7. 最后当所有的任务完成,master节点会通知用户程序并返回。

在成功的结束执行以后,我们会获得R份的输出文件,一般来说,我们不需要去合并这R份文件,因为它们往往是其它分布式计算的输入或者它们可以被其它的分布式应用处理。

主节点数据结构

Master节点需要维护一些数据结构以保证整个过程的正确执行,下面是部分数据结构:

  1. Job 完成状态:记录每个 map 任务和 reduce 任务的完成状态,状态包括未执行,正在处理和已完成。
  2. 资源分配表:记录每个 worker 节点的负载状况和可用资源,以便于进行任务调度和资源分配。
  3. 中间结果信息表:记录每个 map 任务产生的中间结果文件的位置和大小,以便于 reduce 任务能够访问和处理中间结果。

容错

这里我们仅仅讨论Worker Failure的情况,对于Master节点的容错我们不予讨论。

首先,master节点会定时去ping工作节点,假如在一段预先设定好的时间内没有收到回复,master会认为该工作节点已经宕机,所有由该节点完成的map任务都会被设置为空闲状态,由该节点正在执行的map或reduce任务都会被设置为未完成,这些被重新设置为未完成的任务会被重新执行。

正在执行的任务需要重新执行很容易理解,这里解释一下为什么所有被该节点执行完成的map节点都需要重新执行。这是因为在MapReduce模型中,map函数执行的结果会被放在本机的本地磁盘中,而reduce函数的执行结果会被放置在远程文件系统中,如何执行map的机器宕机,那么执行的结果将无法被访问,所以必须重新执行,而reduce函数的执行结果由于保存在远程,所以无需重新执行。

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

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

相关文章

6.1 总体和样本

学习目标: 要学习总体和样本,可以按照以下步骤进行: 了解总体和样本的概念:总体是指研究对象的全体,样本是从总体中随机抽取的一部分。了解它们的概念有助于后续学习。 掌握简单随机抽样的方法:简单随机…

HTML学习(1)

文章目录HTML初识第一个HTML程序HTML元素HTML属性HTML标题HTML段落HTML样式格式化标签HTML引用HTML注释HTMLCSSHTML链接HTML图片HTML表格HTML列表HTML块我的个人博客:欢迎来逛逛 HTML初识 HTML全称是:Hyper Text Markup Language HTML不是一种编程语言…

如何在Windows系统上制作U盘启动盘?

使用U盘重装Windows电脑系统,对于熟悉电脑的人来说十分常见,但是不少电脑小白并不会制作U盘启动盘。U盘启动盘是包含操作系统的外部硬盘驱动器,可用于启动计算机或笔记本电脑。下面我们就来了解一下如何制作U盘启动盘。 注意: U …

在芯片行业,想要达到年薪百万难吗?

近两年芯片行业爆火,受到了方方面面的关注。新的一年新的开始,现在这个行业的真实情况到底如何?从事芯片行业有没有前途?下面就来具体谈一谈,希望能给想入高薪行业的你一些帮助。 芯片工程师为什么这么贵?…

ControlNet 1.1重磅发布,14个模型全部开源!

来源:https://github.com/lllyasviel/ControlNet-v1-1-nightly ControlNet 1.1 与 ControlNet 1.0 具有完全相同的体系结构,ControlNet 1.1 包括所有以前的模型,具有改进的稳健性和结果质量,并添加了几个新模型。 模型命名规则更新 从 ControlNet 1.1 开…

英汉互译在线翻译-英文翻译中文的翻译

您是否曾经遇到需要翻译英语文件,但被繁琐的翻译过程所拖慢了工作进度?或者遭遇了机器翻译的低准确率和翻译错误困扰?如果是这样,那么我们的英语翻译中文转换器将是您在这方面的最佳选择! 我们的英语翻译中文转换器是…

CSS学习(2) - 边距与高宽 + 框模型

文章首发于:欢迎大佬们前来逛逛 文章目录CSS边框边框样式边框宽度边框颜色单独设置边框边框属性简写圆角边框CSS边距外边距外边距合并CSS内边距内边距与内容宽度CSS高度与宽度CSS框模型CSS边框 border 属性能够设置边框的属性,包括样式,颜色…

vscode连接Linux开发

vscode远程开发Linux项目 1、首先在vscode中下载安装 Remote SSH。 安装完成后 vscode 左侧就会出现下面的图标。 2、配置远程Linux的信息 # Read more about SSH config files: https://linux.die.net/man/5/ssh_config # Host centos # HostName 192.168.88.10 # …

14. unity粒子特效--速度、粒子环绕、力(重力、阻力、风力等)、噪音

1. 渐变速度(Velocity over Time) 可以分别指定x,y,z三个方向的速度,最终的速度是三个方向的速度合成,点击右侧的下拉三角,也可以使用曲线进行速度的控制调节,如下图所示: 2. 粒子环绕 粒子…

数据治理:1分钟教你认识和识别主数据

​我们讲元数据是企业数据管理的基石,主数据是企业经营运作的主体对象。一般而言,都是从元数据或主数据切入,再逐步展开数据治理的其他领域。企业数据的范围很广而且在不断的增加和演变,哪些数据应该作为主数据加以合理的管理&…

【JSON学习笔记】1.JSON 简介及语法

前言 本章介绍JSON及其语法。 JSON 教程 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法,类似 XML。 JSON 比 XML 更小、更快,更易解析。 JSON 易于人阅读和编写。 C、Python、C、Java、PHP、Go等编程…

python机器学习基础——监督学习算法之线性回归

定义 线性模型是在实践中广泛使用的一类模型,几十年来被广泛研究,它可以追溯到一百多年前。线性模型利用输入特征的线性函数 用于回归的线性模型 import mglearn import matplotlib.pyplot as pltmglearn.plots.plot_linear_regression_wave()plt.show…

使用vue实现分页

使用vue实现分页的逻辑并不复杂,接收后端传输过来的数据,然后根据数据的总数和每一页的数据量就可以计算出一共可以分成几页 我编写了一个简单的前端页面用来查询数据,页面一共有几个逻辑 具体的效果可以看下面的演示 下面就来看一下具体的实…

【MyBatis】MyBatis分页插件的使用

文章目录MyBatis分页插件的使用前置知识分页插件的使用MyBatis分页插件的使用 前置知识 MyBatis基础用法。推荐阅读:MyBatis的基本使用 MySQL分页查询: 知道分页查询的规律,同时知道limit index pageSize的使用 index:当前页的起…

【分布式 论文】之 1. MapReduce——Simplified Data Processing on Large Clusters

文章目录1. 需求 / 现存问题2. 总述3. 实现3.1 概述3.2 Master的数据结构3.3 容错性3.3.1 worker节点故障3.3.2 master节点故障3.3.3 故障环境下的语义3.4 位置(Locality)3.5 任务粒度3.6 备份任务4. 对MapReduce的扩展4.1 划分函数4.2 排序保证4.3 聚合…

【Python】网络请求

目录 一、网络请求流程 1.HTTP 2.URL 3.网络传输模型 4.长链接/短链接 二、爬虫基础 1.基础概念 2.发送请求 3.请求模式 4.cookie 5.retrying 一、网络请求流程 1.HTTP 用户输入网址,例如 www.baidu.com浏览器先向DNS请求,找到网址域名对应的…

【Linux】网络层 — IP协议

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

html页面在其他浏览器中渲染不出来

参考文章 问题 Vs code软件中live sever插件设置默认的浏览器是360浏览器,所以一直以来页面都是默认在360浏览器上进行打开并且没有问题。 后面想换谷歌浏览器打开html页面看下效果,发现图表和数据渲染不出来: 报错信息: 用js…

想制作出专业水准的音视频?掌握H.264编码技巧是关键

H.264编码原理 H.264,也被称为先进视频编码(AVC),是目前最流行的视频编码标准之一,其压缩效率很高。H.264编码基于视频编码的原始数据,使用一系列算法和技术以更小的比特率呈现更高质量的视频。以下是H.26…

【SSM】Spring6(十一.Spring对事务支持)

文章目录1.引入事务场景1.1准备数据库1.2 创建包结构1.3 创建POJO类1.4 编写持久层1.5 编写业务层1.6 Spring配置文件1.7 表示层(测试)1.8 模拟异常2.Spring对事务的支持2.1 spring事务管理API2.2 spring事务之注解方式2.3 事务的属性2.4 事务的传播行为…