Lab1 论文 MapReduce

目录

🌹前言

🦅2  Programming Model

🌼2.1  Example

🌼2.2  Types

🌼2.3  More Examples

🦅3  Implementation(实现)

🌼3.1 ~ 3.3

🌼3.4 ~ 3.6

🦅4  Refinements(改进)

🌼4.1 ~ 4.5

🌼4.6 ~ 4.9

🦅5 Performance

🦅6 Experience


🌹前言

介绍:nil.csail.mit.edu/6.824/2021/notes/l01.txt

论文:rfeet.qrk (mit.edu)

视频:Lecture 1: Introduction (youtube.com)

中文视频:Lecture 1- Introduction_哔哩哔哩_bilibili

付费视频:simviso-开源分享,传播知识 (simtoco.com)

作业提交:6.824 Lab 1: MapReduce (mit.edu)

先看论文,再看视频,最后做实验

🦅2  Programming Model

🌼2.1  Example

0)伪代码

1)map

// MapReduce 库中的 Map 函数
void map(const string& key, const string& value) {// key: document name// value: document content// ("document1", "hello world hello")istringstream iss(value); // 字符串流, 从文本提取单词string word;while (iss >> word)// 输出键值对cout << "EmitIntermediate(" << word << ", \"1\")" << endl;
}
EmitIntermediate(hello, "1")
EmitIntermediate(world, "1")
EmitIntermediate(hello, "1")

2)reduce

// MapReduce 库中的 Reduce 函数
void reduce(const string& key, const vector<string>& values) {// key: a word// value: a list of counts// ("hello", {"1", "1"})int result = 0; // 单词出现次数for (size_t i = 0; i < values.size(); ++i)// atoi("..."): "+211" --> 211// 字符串转 int// c_str 转 C风格字符串result += atoi(values[i].c_str());// 模拟发出最终结果cout << "Emit(" << key << ", " << result << ")" << endl;
}
Emit(hello, 2)

🌼2.2  Types

输入的键 / 值(原始数据集) && 输出的键 / 值 ———— 不同域

中间的键 / 值(Map处理后生成) && 输出的键 / 值(Reduce处理后) ———— 相同域

"document1", "hello world hello" // 输入的键/值"hello", "1" // 中间的键/值
"world", "1" 
"hello", "1""hello", "2" // 输出的键/值

Map函数:处理输入数据,生成中间键值对。中间键值对被 MapReduce框架收集并排序,传递给 Reduce 函数

Reduce函数:接受中间键值对,以及与之关联的的中间值列表,然后对这些值进行聚合操作,生成输出键值对

上述结构,允许 MapReduce 框架处理大规模数据集,通过分布式并行处理数据,提高数据处理效率和可扩展性

总而言之,字符串传递给用户所定义的函数,用户所定义的函数负责将字符串转化成合适的类型

🌼2.3  More Examples

1)用户程序 User Program:启动 MapReduce 的程序,定义了 Map 和 Reduce 函数。

2)主节点 Master:将输入数据拆分成多个片段(splits),并将这些 splits 分配给不同的工作节点(workers)。

3)工作节点 workers:实际数据处理的节点。分两种,执行 Map 函数 || 执行 Reduce 函数。每个工作节点从主节点接受任务,并在本地执行

4)输入文件 Input files:存储在分布式系统 GFS。

5)Map 阶段 Map phase:workers 执行 Map 函数,根据输入数据生成中间键值对(Intermediate key/value pairs)。中间键值对会被写入本地磁盘,并按键(key)分区

6)本地写入 Local write:Map 工作节点将中间数据写入本地磁盘。

7)远程读取 Remote read:Reduce 工作节点通过网络从 Map 工作节点的本地磁盘中读取中间数据。

8)Reduce 阶段:Reduce 工作节点执行 Reduce 函数,处理相同键的所有值,并将结果写入输出文件。

🦅3  Implementation(实现)

🌼3.1 ~ 3.3

3.1 Execution Overview 

1,对中间数据排序,是为了让所有具有相同键的值都被聚合到一起。

2,workers 和 Master 都是用户程序启动的多个副本。

3,Map函数产生的中间键/值对在内存中缓冲,这些 缓冲对 在本地磁盘上的位置被传回给主节点,主节点负责将这些位置转发给Reduce工作者

4,当所有的Map任务和Reduce任务都完成后,主节点唤醒用户程序

3.2 Master Data Structures 

1,主节点维护着多个数据结构。对于每个Map任务和Reduce任务,它存储着状态(空闲、进行中或已完成) 

2,主节点是中间文件区域位置从 Map 任务传播到 Reduce 任务的渠道

3,因此,对于每个完成的 Map 任务,主节点存储着该 Map 任务产生的 R 个中间文件的位置和大小

随着 Map 任务的完成,这些位置和大小信息会更新。这些信息会逐渐推送给正在进行Reduce任务的工作者。

3.3 Fault Tolerance

工作者故障:

(1)主节点定期对每个工作者进行 ping 操作。如果在一定时间内没有收到工作者的响应,主节点将该工作者标记为失败

(2)由该工作者完成的任何 Map 任务都会重置回它们的初始空闲状态,因此有资格在其他工作者上调度。

(3)类似地,任何在失败的工作者上进行中的Map任务或Reduce任务也会被重置为空闲,并有资格重新调度。

(4)由于完成的Map任务的输出存储在失败机器的本地磁盘上,因此无法访问,所以失败时需要重新执行。由于完成的Reduce任务的输出存储在全局文件系统中,因此不需要重新执行。 

(5)主节点需要定期写入 checkpoints,以便它 dead 后,可以恢复到最后一个 checkpoint 的状态

Semantics in the Presence of Failures
故障下的语义👇

1,确定性函数和输出一致性

MapReduce 中 Map函数 和 Reduce函数是确定的话,意味着,相同的输入,总是产生相同的输出

那么,无论是否发生故障,最终的输出都一样

2,原子提交和临时文件

(1)“原子”:操作要么完全完成,要么不发生,不会处于中间状态。

(2)MapRedeuce中,以原子提交的方式来保存任务的输出👇

任务的输出数据,首先被写入一个临时文件,然后一次性将该临时文件重命名为最终输出文件

这个重命名操作是原子的(确保的输出文件要么完全不可见,要么完全可见,不会出现输出文件部分更新的情况)

(3) MapReduce 中,每个任务的输出受限被写入一个临时文件(类似草稿纸),在任务完成得最终输出之前,现在 “草稿纸” 打草稿,可以防止数据丢失。

🌼3.4 ~ 3.6

3.4 本地性(Locality):

1)MapReduce 利用 GFS(Goole File System)系统存储数据。

2)GFS系统将大文件切分成一小块一小块,每块约 64 MB 大小,并且会在不同机器上保存这些数据块的副本

3)任务开始时,主节点优先将任务分配给 已经存储了数据块 的机器,如果没有已经存储的数据块的机器,主节点就会将任务优先分配给, 离数据块存储位置比较近 的机器。

4)👆得益于上述策略,数据一般在本地机器读取,所以不需要通过网络来 传输数据 ,节省了网络带宽。

5)本地性,即,尽可能利用本地资源来处理数据,以减少对网络带宽的需求,提高数据处理效率。

3.5 任务粒度(Task Granularity)

MapReduce 中任务粒度,由两个参数决定

任务粒度过大 -- 某些机器很快完成任务变空闲,而其他机器还在忙碌,造成资源浪费

任务粒度过小 --

a. 任务分配更均匀,提高整体效率

b. 某台机器失败后,任务粒度较小,处理的任务量较小,所以可以迅速在其他机器重启

c. 可能导致任务调度开销增加

3.6 备份任务(Backup Tasks):

1)分布式计算环境中,由于 机器故障,资源竞争等原因,某些任务执行非常慢,这些执行缓慢的任务称为 “落后者”。

2)所以 MapReduce 引入了备份任务机制。

3)功能:

a. 识别落后者:执行时间超出平均时间,确定为 “落后者”

b. 调度备份任务:一旦识别出 “落后者”,主节点为 “落后者” 进行备份(除了原本正在执行的任务,相同的任务会在另一台机器执行)

c. 资源利用:开销不大,1000台机器,只需额外的几台机器执行备份

d. 任务完成:原始 OR 备份任务,一个完成 == 完成

e. 👆以上机制,显著减少了 “落后者” 导致的整个任务的拖延,使得大型 MapReduce 操作完成时间减少到 50%

f. 容错性:备份任务的存在,避免了单点故障导致的完全失败

🦅4  Refinements(改进)

🌼4.1 ~ 4.5

4.1  Partitioning Function(分区函数)

1)分区函数:

用来决定如何将 Map 阶段产生的 中间键值对(Intermediate key/value pairs) 分配给不同的 Reduce 任务。

这个过程称为 分区(Partitioning)(将大量数据切分成更小的块,以便并行处理)

2)作用:

a. 负载均衡:使得 Reduce 任务获得大致相同数量的数据,从而避免某些任务过载而其他任务空闲的情况。

b. 数据局部性:合理的分区策略,使得数据在 物理上 更接近于处理它的任务,减少数据在网络中的传输。

3)默认分区函数:

默认分区函数基于哈希。

比如,使用 hash(key) mod R 策略,hash(key) 是键的哈希值,R 是Reduce任务的数量

4.3 Combiner Function

reduce函数的输出被写入最终的输出文件

combiner函数的输出被写入一个中间文件,该文件将被发送到reduce任务

4.4 Input and Output Types

  • 支持多种格式
    MapReduce库支持多种输入数据格式,例如“文本”模式,其中每行作为一个键/值对,键是文件中的偏移量,值是行的内容
  • 输入分割
    每种输入类型知道如何将自己分割成有意义的范围,以便作为单独的Map任务处理,例如文本模式确保仅在行边界分割

4.5 Side-effects

1)确定性:任务的输出只和它的输入有关,和执行顺序和外部环境无关

2)原子性:先将所有数据写入临时文件,成功后,原子性的将临时文件命名为最终输出文件,保证任务过程不会留下损坏的文件

3)幂等性:任务重新执行(多次执行),输出文件一致

🌼4.6 ~ 4.9

4.6 Skipping Bad Records

1)MapReduce库检测哪些记录导致确定性崩溃,并跳过这些记录以取得进展

2)每个工作进程安装了一个信号处理程序,用于捕获段错误和总线错误

3)Map或Reduce操作之前,MapReduce库将参数的序列号存储在全局变量
4)用户代码生成信号,信号处理程序,发送一个包含序列号的“临终”UDP数据包,到MapReduce 主节点

5)主节点记录多次失败后,下次 Map 或 Reduce 任务就会跳过该节点

4.7 Local Execution 

1)Map 或 Reduce 函数很难调试,因为分布式通常有几千台机器

2)所以我们通过一个特殊标志,可以直接使用 gdb 等调试/测试工具

4.8 Status Information 

1)主节点运行一个HTTP服务器,导出一组页面让用户使用

2)页面显示:已完成任务,进行中任务,输入字节数,中间数据字节数,输出字节数,处理速率等信息(以便增加资源 或 优化代码)

3)还显示了:失败工作节点,失败时执行的任务(以便调试代码)

4.9 Counters

1)创建计数器对象,用于统计各种事件的发生次数

2)各个工作节点上的计数器值会定期发送回主节点,并由主节点聚合这些值,避免重复计数,并在作业完成后返回给用户代码

// 声明一个计数器对象指向uppercase
Counter* uppercase; 
// 通过GetCounter函数获取名为"uppercase"的计数器
uppercase = GetCounter("uppercase");
// 定义Map函数处理输入
map(String name, String contents): // 遍历输入内容中的每个单词for each word w in contents: // 如果单词是大写开头的if (IsCapitalized(w)): // 对应的计数器increment操作,增加计数uppercase->Increment(); // 调用EmitIntermediate函数,发出中间键值对EmitIntermediate(w, "1");

🦅5 Performance

 (1)

排序 sort 任务需要将中间输出写入本地磁盘是因为Map任务生成的数据量很大,需要在本地磁盘上进行聚合和排序,以便于后续的Reduce任务处理

(2)

而 grep 任务由于其输出数据量小,可以直接在内存中处理或通过网络传输给Reduce任务,无需额外的磁盘I/O操作

(3)

备份是为了解决“落后者”(主节点识别“落后者”,并为它备份--相同任务在另一台机器执行,避免了单点故障导致的完全失败)

(4)

备份后,即使在有意引入机器故障的情况下,MapReduce程序也能够有效地恢复并完成执行,Figure 3(c)就是,即使 kill 了 200 个进程,重新执行这些 Map 任务也很快,只比正常执行时间多了 5%

🦅6 Experience

(1)应用领域

  • 大规模机器学习问题
  • Google新闻和Froogle产品的数据聚类问题
  • 提取用于生成热门查询报告(例如Google Zeitgeist)的数据
  • 提取新实验和产品使用的网页属性(例如从大量网页语料库中提取地理位置以进行本地化搜索)
  • 大规模图计算

(2)成果

MapReduce之所以如此成功,是因为它允许开发人员在半小时内在一千台机器上简单编写并高效运行程序,大大加快了开发和原型设计周期

(3)大规模索引Large-Scale Indexing

        a. 因为处理容错、分布和并行化的代码隐藏在 MapReduce 库中,当使用MapReduce表达时,从 3800 行的 C++ 代码减少到 700 行

        b. 大多数由机器故障、慢机器和网络问题引起的问题都由MapReduce库自动处理,无需操作员干预,极大提高了索引过程的性能

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

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

相关文章

Anaconda+Pycharm 项目运行保姆级教程(附带视频)

最近很多小白在问如何用anacondapycharm运行一个深度学习项目&#xff0c;进行代码复现呢&#xff1f;于是写下这篇文章希望能浅浅起到一个指导作用。 附视频讲解地址&#xff1a;AnacondaPycharm项目运行实例_哔哩哔哩_bilibili 一、项目运行前的准备&#xff08;软件安装&…

BN的 作用

1、背景&#xff1a; 卷积神经网络的出现&#xff0c;网络参数量大大减低&#xff0c;使得几十层的深层网络成为可能。然而&#xff0c;在残差网络出现之前&#xff0c;网络的加深使得网络训练变得非常不稳定&#xff0c;甚至出现网络长时间不更新或者不收敛的情形&#xff0c;…

ER模型理论和三范式

ER模型理论和三范式 各种关系多对一一对一一对多多对多 三范式理论函数依赖完全函数依赖部分函数依赖传递&#xff08;间接&#xff09;函数依赖 第一范式&#xff1a;属性&#xff08;表字段&#xff09;不可切割第二范式&#xff1a;不能存在 部分函数依赖(都存在完全函数依赖…

2款一键word生成ppt的AI工具,让职场办公更为简单!

在当下主打异步沟通的职场办公环境中&#xff0c;我们与很多人的沟通&#xff0c;都是通过书面材料来达成的&#xff0c;这就让 Word 或文档编辑软件变得更为重要&#xff0c;与此同时&#xff0c;有时为了凸现书面材料中的重点&#xff0c;我们还要将 word 文档转换为 ppt 来进…

2024年06月CCF-GESP编程能力等级认证Python编程五级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 在Python中&#xff0c;print((c for c in “GESP”))的输…

MiniGPT-Med 通用医学视觉大模型:生成医学报告 + 视觉问答 + 医学疾病识别

MiniGPT-Med 通用医学视觉大模型&#xff1a;生成医学报告 视觉问答 医学疾病识别 提出背景解法拆解 论文&#xff1a;https://arxiv.org/pdf/2407.04106 代码&#xff1a;https://github.com/Vision-CAIR/MiniGPT-Med 提出背景 近年来&#xff0c;人工智能&#xff08;AI…

如何让自动化测试框架更自动化?

一、引言 ​对于大厂的同学来说&#xff0c;接口自动化是个老生常谈的话题了&#xff0c;毕竟每年的MTSC大会议题都已经能佐证了&#xff0c;不是大数据测试&#xff0c;就是AI测试等等&#xff08;越来越高大上了&#xff09;。不可否认这些专项的方向是质量智能化发展的方向&…

刷题(day02)

1、leetcode136.删除链表的结点 给定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。 返回删除后的链表的头节点。 示例 1: 输入: head [4,5,1,9], val 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点&#xff0c;那么在调用了你的函数…

设计模式探索:适配器模式

1. 适配器模式介绍 1.1 适配器模式介绍 适配器模式&#xff08;adapter pattern&#xff09;的原始定义是&#xff1a;将一个类的接口转换为客户期望的另一个接口&#xff0c;适配器可以让不兼容的两个类一起协同工作。 适配器模式的主要作用是把原本不兼容的接口&#xff0c…

c++初阶学习----入门(上)

大家好啊。最近学习了一点关于c的知识。这不就迫不及待的来与大家分享了嘛。但我这也是现学现卖所以咧。有很多遗落甚至不对的地方希望大家可以在评论区里面指出来。这样也可以增加大家对知识的巩固。 c语言与c的联系 不知道大家看到c会不会不由自主的联想到C语言啊。毕竟都是…

手机自带录屏在哪?6个软件教你快速进行手机录屏

手机自带录屏在哪&#xff1f;6个软件教你快速进行手机录屏 手机自带的录屏功能可以让你轻松录制屏幕上的内容&#xff0c;记录游戏过程、制作教程或捕捉其他重要时刻。不同品牌的手机可能在不同位置提供录屏功能。以下是一些常见的手机品牌及其录屏功能位置&#xff0c;以及一…

运动爱好者的新选择:哈氪聆光气传导耳机,轻巧又安全

平时不管是漫步街头、骑行穿梭&#xff0c;还是乘坐公共交通时&#xff0c;我总是喜欢佩戴耳机&#xff0c;借此隔绝外部的喧嚣&#xff0c;享受音乐的乐趣。在户外使用耳机&#xff0c;我更倾向于选择气传导耳机&#xff0c;它们更符合我的需求&#xff0c;因为这种耳机能让我…

SECS/GEM快速完成半导体设备通讯

金南瓜帮助国内大量从事半导体前道设备开发研制、生产的设备厂商&#xff0c;通过快速提供稳定可靠的SECS/GEM、GEM300产品&#xff0c;为客户在激光退火、湿法设备&#xff08;清洗、镀膜等&#xff09;、离子注入、MOCVD、PVD等客户专注于核心工艺提升&#xff0c;提升企业的…

Gen4Gen:多概念个性化图像生成的数据驱动革新

个性化文本到图像生成模型在用户控制生成过程方面取得了重要进展。这些模型能够通过少量训练样本学习并合成包含新颖个性化概念的图像&#xff0c;例如用户的宠物或特定物品。然而&#xff0c;现有技术在处理多概念个性化时存在局限性&#xff0c;尤其是在生成包含多个相似概念…

连接与隔离:Facebook在全球化背景下的影响力

在当今全球化的背景下&#xff0c;Facebook作为全球最大的社交网络平台&#xff0c;不仅连接了世界各地的人们&#xff0c;还在全球社会、经济和文化中发挥着深远的影响。本文将深入探讨Facebook在全球化进程中的作用&#xff0c;以及其对个体和社会之间连接与隔离的双重影响。…

【MATLAB源码-第232期】基于matlab的 (204,188) RS编码解码仿真,采用QPSK调制输出误码率曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Reed-Solomon码&#xff08;RS码&#xff09;是一类广泛应用于数字通信和存储系统中的纠错码&#xff0c;尤其在光盘、卫星通信和QR码等领域有着重要作用。RS码是一种非二进制的纠删码&#xff0c;由Irving S. Reed和Gustave…

当CNN遇上Mamba,高性能与高效率通通拿下!

传统视觉模型在处理大规模或高分辨率图像时存在一定限制&#xff0c;为解决这个问题&#xff0c;研究者们就最近依旧火热的Mamba&#xff0c;提出了Mamba结合CNN的策略。 这种结合可以让Mamba在处理长序列数据时既能够捕捉到序列中的时间依赖关系&#xff0c;又能够利用CNN的局…

思维+并查集,1670C - Where is the Pizza?

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1670C - Where is the Pizza? 二、解题报告 1、思路分析 考虑两个数组a&#xff0c;b的每个位置只能从a&#xff0c;b中挑一个 不妨记posa[x]为x在a中位置&#xff0c;posb同理 我们假如位置i挑选a[i]&a…

【LLM】三、open-webui+ollama搭建自己的聊天机器人

系列文章目录 往期文章回顾&#xff1a; 【LLM】二、python调用本地的ollama部署的大模型 【LLM】一、利用ollama本地部署大模型 目录 前言 一、open-webui是什么 二、安装 1.docker安装 2.源码安装 三、使用 四、问题汇总 总结 前言 前面的文章&#xff0c;我们已经…

探索Qt的QVariant:灵活的数据交换机制

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…