MapReduce [OSDI‘04] 论文阅读笔记

原论文:MapReduce: Simplified Data Processing on Large Clusters (OSDI’04)

1. Map and Reduce

  • Map:处理键值对,生成一组中间键值对
  • Reduce:合并与同一中间键相关的所有中间值
  • process overview:分割输入数据,组织程序在一组机器上的执行,处理机器故障,以及管理所需的机器间的通信

2. Introduction

  • 如何并行化计算、分发数据和处理故障等问题,使得原本简单的计算被大量复杂的代码所掩盖,无法处理这些问题。
  • 通过设计MapReduce,我们可以清晰表达我们试图执行的简单计算,同时隐藏关于并行化、容错、数据分布、负载均衡的相关细节。
  • 主要贡献:提供一个可以自动进行分布式并行化大规模计算的接口,及其实现。

3. Programming Model

  • MapReduce执行的计算以一组键值对作为输入,然后产生另一组键值对作为输出。执行的计算由两个函数完成:Map函数和Reduce函数,均由用户来编写实现。
  • Map:应用在每个键值对上,产生一组中间键值对作为输出,然后MapReduce库会汇总关联于同一中间键I的中间值并将它们传送给Reduce函数。
  • Reduce:接受由Map函数传递过来的中间键I及其相应的一组中间值作为输入,然后合并这些中间值得到一个更小的值的集合作为输出。
  • 类型
    • 在这里插入图片描述
    • 对于Map,输入的键值对和输出的键值对来自不同的值域,而对于Reduce则相同。
  • 例子
    • 在这里插入图片描述
    • 给定大量的文档,计算出文档中每个word出现的次数。Map函数会输出每个单词以及相关的出现次数,Reduce函数会将某个单词的所有计数相加并输出。

4. Implementation

4.1 Execution Overview

在这里插入图片描述

  • MapReduce的执行流程:
    • 将输入文件分割成若干个大小为16到64MB的pieces,然后在集群的机器中启动多个副本程序(fork);
    • 在启动的程序中,由一个master和多个workers;假设计算过程总共包含M个Map任务和R个Reduce任务,master会将所有这些任务分配给workers,一个worker会被分配到一个Map任务或一个Reduce任务;(assign map/reduce)
    • 被分配Map任务的worker首先读取相应split的内容,从输入数据中解析出所有的键值对,为每个键值对调用Map函数,由Map函数产生的中间键值对会被缓冲在内存中;(read)
    • 缓冲在内存中的中间键值对会被阶段性地写到本地磁盘中,同时根据partition函数被分为R个部分,然后worker会将这些中间结果的位置信息报告给master;(local write)
    • 当一个负责Reduce任务的worker接收到master传递过来的中间结果的位置信息后,通过远程调用从Map workers的本地磁盘中读取中间结果;当worker完成读取所有中间结果时,将数据以中间键排序使得对应相同键的值能够连续分布;(如果中间结果数据量太大,可能需要进行外部排序)(read remote)
    • Reduce worker遍历所有已排序的中间键值对,然后对于每个中间键,将该键及其相应的值作为参数调用用户定义的Reduce函数,Reduce 函数的输出会被放入到对应的 Reduce Partition 输出文件;(write)
    • 当所有的Map任务和Reduce任务都已经完成后,master会唤醒用户程序,MapReduce调用结束并返回到用户代码中。
4.2 Master Data Structures
  • 对于每个Map任务和Reduce任务,存储状态信息(idle, in-progress, or completed),以及每个(非空闲的)worker机器的ID。
4.3 Fault Tolerance
  • Background:MapReduce计算通常在成千上万的机器上面执行,难免遇到机器故障,所以必须容错。
  • Worker Failure
    • master会周期性地向每个worker发送ping信号,如果没有收到回复,则将该worker设置为不可用状态,然后将已经在该worker中完成的Map任务或正在该worker中执行的Map或Reduce任务设置为初始的idle状态,并重新分配给其他worker。
    • 在不可用的worker中已经完成的Map任务需要重新执行,因为Map任务的输出是存储在已经不可用的worker的本地磁盘中(不可访问);而已经完成的Reduce任务不需要重新执行,因为Reduce任务输出的结果是存储在global file system中。
    • Map任务重新分配的worker信息需要通知所有负责Reduce任务的workers。
  • Master Failure
    • 周期性地将集群的当前状态以及checkpoints写入磁盘中,如果master进程终止后,重新启动一个新的master进程并利用存储在磁盘中的数据恢复到最新一次的checkpoint的状态。
  • Semantics in the Presence of Failures
    • 通过Map任务和Reduce任务的原子性提交来保证输入输出的确定性(保持和整个程序无错顺序执行的输出结果一致)
    • 当一个Map任务完成后,worker向master发送中间结果位置信息,master仅保存一次同一Map任务的结果信息。
    • 当一个Reduce任务完成后,worker原子性地将暂存输出文件重命名为最终输出文件。
4.4 Locality
  • 在分配任务时,master会考虑输入文件的位置信息,并尝试在包含相应输入数据副本的机器上分配Map任务。如果做不到,它会尝试给在该任务的输入数据副本附近的worker分配一个Map任务。
  • 通过利用数据的本地性以减小网络带宽开销。
4.5 Task Granularity
  • M和R的取值一般比worker机器的数量大得多,通过使每个worker承担多个不同的任务来实现动态的负载均衡同时加速一个不可用worker的恢复(当一个负责某些Map任务的worker变为不可用时,其他所有worker可以分担这些任务)。
  • master需要进行O(M + R)次调度决策和使用O(M * R)的空间保存状态信息。
4.6 Backup Tasks
  • straggler:某个worker机器花了很长时间去完成剩下的若干个Map或Reduce任务,从而使得整个MapReduce计算花费很长时间
  • solution:当一个MapReduce计算接近完成时,将剩下的正在执行的任务进行备份然后分配给其他空闲的worker,只要其中一个完成某个任务即视该任务已完成。

5. Refinements

  • Partitioning Function
    • 根据用户指定的(Reduce)输出文件数R,设置partition函数,如“hash(key) mod R”
  • Combiner Function
    • 在某些情况下,Map任务会产生大量重复的中间键,通过引入combiner函数来执行Map函数输出结果的部分合并(对应相同键的值),从而减少 Map 和 Reduce之间需要传输的数据量,并且加速了整个MapReduce计算过程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EF数据持久化(三层架构,公司查,改)

效果图 Model设置具体流程在下面链接中 https://blog.csdn.net/Mr_wangzu/article/details/136805824?spm1001.2014.3001.5501 DAL using System; using System.Collections.Generic; using System.Linq; using System.Web; using WebApplication2.Models; namespace WebAppli…

力扣由浅至深 每日一题.20 环形链表

山穷水尽,柳暗花明 —— 24.4.3 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整…

实战webSocket压测(一)webSocket背景

一、什么是webSocket? WebSocket是一种在单个TCP连接上进行全双工通信的协议。它允许在客户端(如Web浏览器)和服务器之间建立持久的连接,实现全双工通信。 二、WebSocket出现的背景 1、http协议背景: 以B/S架构为例…

【数据结构】学会了波兰表达式与逆波兰表达式,怎么能允许自己不会通过计算机进行表达式转换呢?

栈在表达式转换中的应用 导读一、中缀表达式二、表达式的组成部分2.1 单一运算符2.2 不带括号的混合运算符2.3 带括号的混合运算符 三、表达式改写3.1 问题分析3.2 算法设计3.3 算法实现3.4 算法测试 结语 导读 大家好!很高兴又和大家见面啦!&#xff0…

moveit中RM65-B适配拓展轴一体规划

Moveit适配拓展轴 1.概述 睿尔曼关节模组和机械臂连接时可以被自动识别,并且睿尔曼机械臂提供同时控制机械臂和拓展关节模组的通信协议(限一个拓展关节)。因此,用户可以在RM机械臂的基础上添加外部关节,构建新的机器…

顶级Layer-3 通证正在飙升,布局龙头Degen Chain(含bitget教程)

近期以太坊生态内,Base 一枝独秀,其 TVL 突破 25 亿美元,创历史新高。并且生态内的社交文化和 DeFi 板块的龙头都很惹眼。 Farcaster 协议上的 meme 币 DEGEN 目前价格为 0.018 美元,7 日涨幅达 376%。 DEGEN 兴起于 Farcaster 的…

备考2024年思维100春季线上比赛?来做做官方模拟题(附答案)

2024年春季思维100活动第一阶段线上比赛(4月20日,星期六,上午)的报名正在进行中,报名时间截止到为4月6日(本周六),请设置好闹钟提醒以免错过。更多安排和需要提前了解的关键点可以见…

制作一个一键运行的10多M的go-cqhttp最简docker镜像

一直有个想自己部署一个QQ机器人,虽然成功完成在Windows环境下基于 go-cqhttp 的搭建工作。但考虑到我有一台常年在线的群晖 NAS,并且已经配置并启用了 Docke r服务,可否将go-cqhttp 迁移至 NAS 上的 Docker 容器中运行吗呢?同时&…

rasa trian 报错解决---Project validation completed with errors.

rasa train 过程中:出现一下问题; Project validation completed with errors. 解决措施:python 3.10版本,rasa 3.6.19, 降低版本 pip3 install rasa3.5.17 -i https://pypi.tuna.tsinghua.edu.cn/simple成功解决

洛谷P1007独木桥(暴力枚举)

题目描述: 说明提示: 思路: 本题的核心思想在于:两人相遇后,转身不计入时间,所以我们可以看作直接穿过去,那么一个人走下桥的时间有两种,一个是本身所在位置x,另一个是l…

CSS基础选择器 小案例复习(画三个小盒子)

(大家好,前面我们学习了基础的选择器,俗话说:温故而知新。所以今天我们将通过小案例来复习前面学过的小知识点。另,十分感谢大家对我文章的支持❤️) 通过这个案例复习两个地方: 类选择器的使用…

MySQL的基本操作(超详细)

👨‍💻作者简介:👨🏻‍🎓告别,今天 📔高质量专栏 :☕java趣味之旅 📔(零基础)专栏:MSQL数据库 欢迎🙏点赞&…

基于k8s的web服务器构建

文章目录 k8s综合项目1、项目规划图2、项目描述3、项目环境4、前期准备4.1、环境准备4.2、ip划分4.3、静态配置ip地址4.4、修改主机名4.5、部署k8s集群4.5.1、关闭防火墙和selinux4.5.2、升级系统4.5.3、每台主机都配置hosts文件,相互之间通过主机名互相访问4.5.4、…

iMessage是怎么成为“黑灰产的乐园”

垃圾/骚扰/色情/钓鱼短信已经成为苹果手机iMessage无法解决的难题。几乎每一位iPhone用户都曾收到过这类短信,被吐槽“每一个iPhone里都藏着一个澳门葡京赌场”。 对于这些垃圾短信,最好的办法就是别点开直接删除,上当/被骗的第一步就是从点开…

go包下载时报proxyconnect tcp: dial tcp 127.0.0.1:80: connectex错误的解决方案

一大早的GoLand就开始抽风了,好几个文件import都红了,于是我正常操作点击提示的sync,但是却报了一堆错: go: downloading google.golang.org/grpc v1.61.1 go: downloading google.golang.org/genproto v0.0.0-20240228224816-df9…

Lambda表达式,Stream流

文章目录 Lambda表达式作用前提函数式接口特点 语法省略模式和匿名对象类的区别 Stream流思想作用三类方法获取方法单列集合(Collection[List,Set双列集合Map(不能直接获取)数组同一类型元素(Stream中的静态方法) 常见的中间方法终结方法收集方法 Optional类 Lambda表达式 作用…

C 回调函数的两种使用方法

对回调(callback)函数的一点粗陋理解,在我小时候,隔壁村有家月饼小作坊(只在中秋那段时间手工制作一些月饼出售,后来好像不做了),做出的月饼是那种很传统很经典的款式,里…

C 练习实例97 - 读磁盘 写磁盘

题目&#xff1a;从键盘输入一些字符&#xff0c;逐个把它们送到磁盘上去&#xff0c;直到输入一个‘#’为止 在桌面新建一个hello.txt文件&#xff0c;内容示例&#xff1a; 代码&#xff1a; #include <stdio.h> #include <stdlib.h>int main() {FILE *fp; //文…

CSS样式-字体类型,文本对齐,外观修饰,文本缩进,文本行间距,外部引用css样式

字体类型和字体属性调整 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Css字体类型大小</title&…

【软路由】iStoreOS全量备份或数据迁移思路

背景&#xff1a;之前是在我的i3小主机上面搭建了iStoreOS&#xff0c;因为有段时间爱折腾&#xff0c;于是乎不知道什么情况就造成首页无法登录&#xff0c;改了的东西无法回滚&#xff0c;好在使用“万能重启”法又可以登录了&#xff0c;于是我就在想把这玩意定期备份一下。…