文章目录

  • 概述
  • 研究意义
  • 编程模型与系统实现
    • 编程模型
      • 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), 其中keylist(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框架会将所有相同keyvalue值聚合为list(value),并送入Reduce函数进行计算。Reduce函数的输入key为单词,value为聚合后的list(value)。Reduce函数会遍历list(value)中的所有value,并将其进行相加,最后输出的结果为该单词在所有文档中出现的次数。

系统实现

基本流程

MapReduce的整体工作框架如上图所示,下面主要介绍一下整个框架的工作流程。

对于输入文件,我们通常是将其存储在分布式文件系统GFS上,其本质上是对文件进行了data partition。在MapReduce框架中,通常的文件分区大小为16MB64MB

对于用户编写好的接口程序,我们通常会将其拷贝到不同的计算节点上。这些计算节点中,只有一个节点为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阶段的分区粒度MR,文中的建议是应该远大于集群数量,原因如下,

  • 可供每个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论文精读相关推荐

  1. 论文精读——CenterNet :Objects as Points

    论文精读--CenterNet :Objects as Points 论文地址:https://arxiv.org/pdf/1904.07850.pdf 机构:UT Austin,UC Berkele ...

  2. 论文精读 | slam中姿态估计的图优化方法比较

    一. 摘要 对于位置环境中的自主导航问题,同步定位与建图(Simultaneous localization and mapping, SLAM)是一个非常重要的工具框架.根据SLAM字面含义可以得知 ...

  3. 李沐论文精读系列四: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 ...

  4. 【论文精读】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 ...

  5. 【推荐系统论文精读系列】(八)--Deep Crossing:Web-Scale Modeling without Manually Crafted Combinatorial Features

    文章目录 一.摘要 二.介绍 三.相关工作 四.搜索广告 五.特征表示 5.1 独立特征 5.2 组合特征 六.模型架构 6.1 Embedding层 6.2 Stacking层 6.3 Residu ...

  6. 李沐论文精读系列五: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 ...

  7. MapReduce论文阅读记录

    本文为阅读MapReduce论文的记录,内容主要是论文的第三部分--实现.方便本人今后查看. 1. 运行概述 下图展示了 MapReduce 过程的整体情况 当用户程序执行 MapReduce 时,会 ...

  8. 【研一小白论文精读】《Big Self-Supervised Models are Strong Semi-Supervised Learners》

    [研一小白论文精读] 研一已经开学了,距离上一次自己写博客也有一段时间了,上一次写的博客我自己看简直又臭又长,这次是第二次,也不知道能不能做出一些改变.首先声明,我自己仍然是一个学术小白,理论基础极差 ...

  9. Classifier-Free Diffusion Guidance【论文精读加代码实战】

    Classifier-Free Diffusion Guidance[论文精读加代码实战] 0.前言 1.Classifier-Free Diffusion Guidance介绍 1.1原理介绍 1. ...

最新文章

  1. 快车 FlashGet 3.1 修正版(1057)
  2. python读取内存和空闲内存
  3. Android第二十五期 - 猜歌小游戏
  4. Kotlin教程学习-数据类型
  5. 【Nginx】错误: [emerg] “proxy_set_header“ directive is not allowed here in D:\sde\phpstudy_pro\...
  6. c# 线向量生成多边形_python脚本实现abaqus前处理2D多晶粒建模(附完整源码)-Voronoi多边形的生成...
  7. 【渝粤教育】电大中专会计电算化_1作业 题库
  8. BugkuCTF-MISC题普通的二维码
  9. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its 错误解决办法
  10. 吴恩达深度学习 —— 4.1 深层神经网络
  11. 北京交大计算机学院院长,蔡伯根(北京交大教授)
  12. C/C++ 随机数生成器的 随机化
  13. ICMPV6协议及NDP协议
  14. php学生成绩系统,php019学生信息学生成绩系统
  15. 年金计算机在线,年金终值复利计算器在线(企业年金计算方法)
  16. android 3d桌面壁纸,五款超酷安卓手机3D桌面软件合辑推荐
  17. 【matlab笔记】寻找极小值
  18. IP-Guard准入控制网关实现机制
  19. Android 环信 客服集成
  20. 打开html按钮没文字,为什么我打开网页有些字没显示但能点击

热门文章

  1. 20190722海外小米和国内华为的关联唤醒调研
  2. WordPress站点彻底高效更换新旧域名插件Velvet Blues Update URLs
  3. 【安泰ATX-3000】线束测试仪:新能源商用车高压绝缘测试分享
  4. 【SVM回归预测】基于matlab粒子群算法优化SVM回归预测【含Matlab源码 1424期】
  5. 浪潮NF5270M3 刷uefi_创18项世界纪录,浪潮打造AI应用最强服务器
  6. The Path to Learning WR Python FPE.6
  7. android 省电模式,android省电模式设置
  8. 阿里首创7天全薪陪伴假,员工关怀卷起来了?
  9. 快速 fieldset 属性详解
  10. 玩自媒体是如何赚钱的!