MapReduce论文精读
文章目录
- 概述
- 研究意义
- 编程模型与系统实现
- 编程模型
- Map
- Reduce
- 示例:统计文档中所有单词的出现次数
- 系统实现
- 基本流程
- 容错处理
- worker异常
- master异常
- locality
- Task Granularity
- Backup Tasks
- Combination Function
- 总结
概述
本文主要目的是记录MapReduce论文中的核心思想,方便个人和大家进行记录和查看。MapReduce同时也是MIT 6.824的必读论文之一,希望大家能看完本文后再进行Lec1的学习。
研究意义
MapReduce的研究意义是给复杂任务的分布式实现提供了一套简单、高效的编程框架。对于分布式系统的开发人员来说,只需要实现特定的Map和Reduce接口,就可以轻松的进行分布式计算,不用关心MapReduce下底层的实现细节和运行机制。
编程模型与系统实现
编程模型
Map
Map函数可以由用户进行自定义实现,其输入为(key,value)
键值对,输出为list(key, value)
键值对序列。文中把Map函数的输出称为中间变量,因为该变量并不会存储到分布式文件系统GFS
当中。在产生中间变量之后,MapReduce框架会将相同key
值的所有value
打包为list(value)
,作为后续Reduce函数的输入参数。
Reduce
Reduce函数也可以由用户进行自定义实现,其输入为(key, list(value))
键值对,输出为list(value)
, 其中key
和list(value)
均由Map函数生成。Reduce函数会对同一个key
下面的所有value
进行操作,产生出最后的结果list(value)
。
示例:统计文档中所有单词的出现次数
map(String key, String value):// key: document name// value: document contentsfor each word w in value:EmitIntermediate(w, "1");reduce(String key, Iterator values):// key: a word// values: a list of countsint result = 0;for each v in values:result += ParseInt(v);Emit(AsString(result));
该例中Map函数的输入key
为文档名,value
为该文档所包含的所有单词。对于文档中的每一个单词w
,Map函数都会生成一个(w, 1)
键值对的中间变量,表示该单词在文档中出现过一次。在所有Map函数执行完毕后,MapReduce框架会将所有相同key
的value
值聚合为list(value)
,并送入Reduce函数进行计算。Reduce函数的输入key
为单词,value
为聚合后的list(value)
。Reduce函数会遍历list(value)
中的所有value
,并将其进行相加,最后输出的结果为该单词在所有文档中出现的次数。
系统实现
基本流程
MapReduce的整体工作框架如上图所示,下面主要介绍一下整个框架的工作流程。
对于输入文件,我们通常是将其存储在分布式文件系统GFS
上,其本质上是对文件进行了data partition。在MapReduce框架中,通常的文件分区大小为16MB
到64MB
。
对于用户编写好的接口程序,我们通常会将其拷贝到不同的计算节点上。这些计算节点中,只有一个节点为master节点,其余都为worker节点。 每个worker节点所要执行的Map和Reduce Task由master节点进行分配。如果我们把输入文件划分为M
份,则会产生M
个Map Task,同样的,如果我们把中间变量划分为R
份,则会产生R
个Reduce Task. master会将Map Task或Reduce Task分配给空闲的woker。
执行Map Task的worker会读入分区数据,调用用户定义的Map函数,然后将计算结果作为中间变量存放在memory buffer中。memory buffer的数据会被周期性地写入local disk中,并被划分为R个分区。中间变量在local disk中的位置信息会上报至master节点,以用于后续的Reduce阶段。
当reduce worker收到master的信息,得指了中间变量在local disk中的位置时,就会通过RPC
来读取分区内所需的所有数据,并根据key
进行排序,因为每个reduce task可能包含多个不同的key,需要对不同map worker的数据进行再聚合。数据排序完成后,reduce worker就会遍历该分区内所有的key
,调用reduce function。
在整个MapReduce过程完成之后,会生成R
个最终文件,因为每个reducer task都会生成一个单独的输出文件。
容错处理
worker异常
master节点会周期性的ping
所有的worker节点。 如果在一定的时间内没有收到worker的回复,则认为该worker已经出现异常。 当worker出现异常时,采取如下措施:
- 该worker已完成的所有Map Task无效,需要重新执行。
- 该worker正在运行的Map Task或Reduce Task无效,需要重新执行。
对于已完成的任务,只需要重新执行Map Task的原因是,Map阶段的输出是作为中间变量存储在local disk上的,因此当worker出现异常时,无法获取中间数据,需要重新执行。对于Reduce Task来说,其输出是直接写入分布式文件系统中的,因此无需重新执行。
当Map Task在worker A上执行完毕后,此时worker A发生故障,根据容错处理,调用worker B重新执行Map Task。此时,master结点将会通知所有的reduce worker发生异常,并让还没有从worker A上读取结果的reduce worker从worker B上读取数据。
master异常
我们可以在master节点上周期性地进行check,并记录checkpoint,这样当master出现故障时,我们就可以根据checkpoint来进行恢复。在本文中,并没有提供具体的master容错解决方案。
locality
根据上文介绍的MapReduce整体的运行框架可以看出,在Map阶段和Reduce阶段读取数据时,都需要大量的网络传输,这成为了系统的主要性能瓶颈。为了解决这个问题,master节点会将Map Task尽量分配给离所需数据最近的worker结点。。
Task Granularity
对于Map阶段和Reduce阶段的分区粒度M
和R
,文中的建议是应该远大于集群数量,原因如下,
- 可供每个worker执行的任务有很多种,从而更好的达到动态负载均衡
- 可以加速异常恢复,当某个worker结点异常时,可以把已完成的task分配到大量不同的worker上并行执行,提高并行度。
Backup Tasks
本文在测试时,发现了MapReduce框架的性能存在长尾现象。当MapReduce快要结束时,如果worker上存在坏扇区则可能会频发触发读写错误,并且由于此时MapReduce所需要的计算资源都变低,集群调度系统会将大量的CPU资源分配给其他任务,从而大大降低了MapReduce的性能。为了解决这个问题,当MapReduce过程进行到快结束时,会将正在执行的Task复制多份到不同的Worker上,从而提高CPU的占用率。 需要注意的是,只要primary task或bakup task有一个执行完毕即可。
Combination Function
在某些情况下,当Map阶段结束后,可能会出现大量相同的数据,增加了网络传输量,大大降低了系统性能。比如在单词个数查询时,如果单词的分布时Zipf
分区,即文中有某些单词大量重复出现。根据前文的介绍,会产生大量(word, 1)
的键值对,combination function可以将这些相同的键值对进行合并,变更为(word, n)
。 Combination function和Reduce Function有以下的不同:
- Combination function只运行在某个worker的内部,并不会通过RPC调用其他worker的数据
- Combination function只会将结果写入local disk。
总结
本文主要介绍了MapReduce论文的核心思想和内容。后续会持续更新MIT6.824的相关笔记和实验,感谢关注~~
MapReduce论文精读相关推荐
- 论文精读——CenterNet :Objects as Points
论文精读--CenterNet :Objects as Points 论文地址:https://arxiv.org/pdf/1904.07850.pdf 机构:UT Austin,UC Berkele ...
- 论文精读 | slam中姿态估计的图优化方法比较
一. 摘要 对于位置环境中的自主导航问题,同步定位与建图(Simultaneous localization and mapping, SLAM)是一个非常重要的工具框架.根据SLAM字面含义可以得知 ...
- 李沐论文精读系列四:CLIP和改进工作串讲(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso)
文章目录 一.CLIP 1.1 简介 1.1.1 前言 1.1.2 模型结构 1.1.3 模型效果 1.1.3.1 对自然分布偏移的鲁棒性 1.1.3.2 StyleCLIP 1.1.3.3 CLIP ...
- 【论文精读】UV-SLAM: Unconstrained Line-based SLAM Using Vanishing Points for Structural Mapping
[论文精读]UV-SLAM: Unconstrained Line-based SLAM Using Vanishing Points for Structural Mapping 论文出处 ICRA ...
- 【推荐系统论文精读系列】(八)--Deep Crossing:Web-Scale Modeling without Manually Crafted Combinatorial Features
文章目录 一.摘要 二.介绍 三.相关工作 四.搜索广告 五.特征表示 5.1 独立特征 5.2 组合特征 六.模型架构 6.1 Embedding层 6.2 Stacking层 6.3 Residu ...
- 李沐论文精读系列五:DALL·E2(生成模型串讲,从GANs、VE/VAE/VQ-VAE/DALL·E到扩散模型DDPM/ADM)
文章目录 一. 前言 1.1 DALL·E简介 1.2 DALL·E2简介 1.3 文生图模型进展 二. 引言 2.1 摘要 2.2 引言&模型结构 三. 算法铺垫 3.1 GANs 3.2 ...
- MapReduce论文阅读记录
本文为阅读MapReduce论文的记录,内容主要是论文的第三部分--实现.方便本人今后查看. 1. 运行概述 下图展示了 MapReduce 过程的整体情况 当用户程序执行 MapReduce 时,会 ...
- 【研一小白论文精读】《Big Self-Supervised Models are Strong Semi-Supervised Learners》
[研一小白论文精读] 研一已经开学了,距离上一次自己写博客也有一段时间了,上一次写的博客我自己看简直又臭又长,这次是第二次,也不知道能不能做出一些改变.首先声明,我自己仍然是一个学术小白,理论基础极差 ...
- Classifier-Free Diffusion Guidance【论文精读加代码实战】
Classifier-Free Diffusion Guidance[论文精读加代码实战] 0.前言 1.Classifier-Free Diffusion Guidance介绍 1.1原理介绍 1. ...
最新文章
- 快车 FlashGet 3.1 修正版(1057)
- python读取内存和空闲内存
- Android第二十五期 - 猜歌小游戏
- Kotlin教程学习-数据类型
- 【Nginx】错误: [emerg] “proxy_set_header“ directive is not allowed here in D:\sde\phpstudy_pro\...
- c# 线向量生成多边形_python脚本实现abaqus前处理2D多晶粒建模(附完整源码)-Voronoi多边形的生成...
- 【渝粤教育】电大中专会计电算化_1作业 题库
- BugkuCTF-MISC题普通的二维码
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its 错误解决办法
- 吴恩达深度学习 —— 4.1 深层神经网络
- 北京交大计算机学院院长,蔡伯根(北京交大教授)
- C/C++ 随机数生成器的 随机化
- ICMPV6协议及NDP协议
- php学生成绩系统,php019学生信息学生成绩系统
- 年金计算机在线,年金终值复利计算器在线(企业年金计算方法)
- android 3d桌面壁纸,五款超酷安卓手机3D桌面软件合辑推荐
- 【matlab笔记】寻找极小值
- IP-Guard准入控制网关实现机制
- Android 环信 客服集成
- 打开html按钮没文字,为什么我打开网页有些字没显示但能点击
热门文章
- 20190722海外小米和国内华为的关联唤醒调研
- WordPress站点彻底高效更换新旧域名插件Velvet Blues Update URLs
- 【安泰ATX-3000】线束测试仪:新能源商用车高压绝缘测试分享
- 【SVM回归预测】基于matlab粒子群算法优化SVM回归预测【含Matlab源码 1424期】
- 浪潮NF5270M3 刷uefi_创18项世界纪录,浪潮打造AI应用最强服务器
- The Path to Learning WR Python FPE.6
- android 省电模式,android省电模式设置
- 阿里首创7天全薪陪伴假,员工关怀卷起来了?
- 快速 fieldset 属性详解
- 玩自媒体是如何赚钱的!