一.概要

  • MapReduce是一种编程模型,它是一种用于处理和生成大型数据集的实现。用户通过指定一个用来处理键值对(Key/Value)的map函数来生成一个中间键值对集合。然后,再指定一个reduce函数, 它用来合并所有的具有相同中间key的中间value 。

二.编程模型

  • 由用户所编写的Map函数接收输入,并生成一个中间键值对集合。MapReduce这个库会将所有共用一个键的值组合到一起,传递给Reduce函数
  • Reduce函数接收一个中间键以及该键的值得集合作为输入。它会将这些值合并起来,生成一组更小的值得集合。

案例
从大量文档统计计算出每一个单词出现的数量

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函数会返回一个单词加上它出现的次数的键值对(在这个例子中,返回的出现次数就是1)。
reduce函数会将该单词的出现次数统计在一起。

三.具体实现

  • 用户程序中的MapReduce库会先将输入文件切分为M个片段,通常每个片段的大小在16MB到64MB之间。接着,它会在集群中启动许多个进程。
  • 有一个进程是比较特殊的,那就是master。剩下的进程都是worker,master会对这些worker进行任务分配。这里有M个Map任务以及R个Reduce任务要进行分配。master会给每个空闲的worker分配一个map任务或者一个reduce任务。
  • 被分配了map任务的worker会读取相关的输入数据片段。它会从输入数据中解析出键值对,并将它们传入用户定义的Map函数中。Map函数所生成的中间键值对会被缓存在内存中
  • 每隔一段时间,被缓存的键值对会被写入到本地硬盘,并通过分区函数分到R个区域内。这些被缓存的键值对在本地磁盘的位置会被传回master。master负责将这些位置转发给执行reduce操作的worker。
  • 当master将这些位置告诉了某个执行reduce的worker,该worker就会使用RPC的方式去从保存了这些缓存数据的map worker的本地磁盘中读取数据。当一个reduce worker读取完了所有的中间数据后,它就会根据中间键进行排序,这样使得具有相同键值的数据可以聚合在一起。之所以需要排序是因为通常许多不同的key会映射到同一个reduce任务中。如果中间数据的数量太过庞大而无法放在内存中,那就需要使用外部排序。
  • reduce worker会对排序后的中间数据进行遍历。然后,对于遇到的每个唯一的中间键,reduce worker会将该key和对应的中间value的集合传入用户所提供的Reduce函数中。Reduce函数生成的输出会被追加到这个reduce分区的输出文件中。
  • 当所有的map任务和reduce任务完成后,master会唤醒用户程序。此时,用户程序会结束对MapReduce的调用。

完成之后,MapReduce的输出结果会存放在输出文件之中。

3.1 Master的数据结构

  • master 中保存了每一个Map和Reduce任务的状态(闲置,正在运行,以及完成), 以及非空闲任务的worker机器的ID
  • 它将map任务所生成的中间文件区域的位置传递给reduce任务。

3.2容错

Worker故障

  • master会周期性ping 每一个worker .如果在一定时间内没有收到worker的相应,那么master 会将该worker 进行标记为 failed . 所有由该worker完成的Map任务会重置为空闲状态,由其他的worker去进行完成。

Master故障

一个简单的解决好办法就是让master周期性的将上文所描述的数据结构写入磁盘,即checkpoint。如果这个master挂掉了,那么就可以从最新的checkpoint创建出一个新的备份,并启动master进程。然而,因为只有一个master,所以我们并不希望它发生故障。因此如果master故障了,我们目前的实现会中断MapReduce计算。客户端可以检查该master的状态,并且根据需要可以重新执行MapReduce操作。

mapreduce 论文 - 阅读笔记相关推荐

  1. MapReduce 论文阅读笔记

    文章目录 Abstract Introduction 2 Programming Model 2.1 Example 2.2 Types 2.3 More Examples 3 Implementat ...

  2. 论文阅读笔记- Dremel

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  3. 全卷积(FCN)论文阅读笔记:Fully Convolutional Networks for Semantic Segmentation

    论文阅读笔记:Fully Convolutional Networks forSemantic Segmentation 这是CVPR 2015拿到best paper候选的论文. 论文下载地址:Fu ...

  4. DnCNN论文阅读笔记【MATLAB】

    DnCNN论文阅读笔记 论文信息: 论文代码:https://github.com/cszn/DnCNN Abstract 提出网络:DnCNNs 关键技术: Residual learning an ...

  5. Learning Multiview 3D point Cloud Registration论文阅读笔记

    Learning multiview 3D point cloud registration Abstract 提出了一种全新的,端到端的,可学习的多视角三维点云配准算法. 多视角配准往往需要两个阶段 ...

  6. FCGF论文阅读笔记

    FCGF论文阅读笔记 0. Abstract 从三维点云或者扫描帧中提取出几何特征是许多任务例如配准,场景重建等的第一步.现有的领先的方法都是将low-level的特征作为输入,或者在有限的感受野上提 ...

  7. PointConv论文阅读笔记

    PointConv论文阅读笔记 Abstract 本文发表于CVPR. 其主要内容正如标题,是提出了一个对点云进行卷积的Module,称为PointConv.由于点云的无序性和不规则性,因此应用卷积比 ...

  8. DCP(Deep Closest Point)论文阅读笔记以及详析

    DCP论文阅读笔记 前言 本文中图片仓库位于github,所以如果阅读的时候发现图片加载困难.建议挂个梯子. 作者博客:https://codefmeister.github.io/ 转载前请联系作者 ...

  9. 2019 sample-free(样本不平衡)目标检测论文阅读笔记

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自知乎,已获作者同意转载,请勿二次转载 (原文地址:https://zhuanlan.zhihu.com/p/100052168) 背景 < ...

最新文章

  1. mysql数据库导入后莫名丢失,oracle导入丢失数据库
  2. MVC5管道处理模型
  3. 贵州2021高考体考成绩查询,2021年贵州体育专业考试成绩查询网址:http://www.eaagz.org.cn/...
  4. css 字体字体图标_CSS基础知识:了解字体
  5. python开发自己的工具包_爬虫开发python工具包介绍 (4)
  6. 关于"舆情监测"关键词在百度搜索中的相关数分析
  7. 简单常用的互联网赚钱工具分享
  8. 瓦楞机自动排单技术收藏
  9. java数据结构与算法之顺序表与链表深入分析
  10. 格密码初步学习记录(三)SVP
  11. MySQL集群:主从模式
  12. Java poi 去除word文档水印
  13. 一文让你秒懂FFT(快速傅里叶变换)
  14. 李炎恢 js教程 拖拽上 思路解析
  15. 异地远程连接在家里的群晖NAS【无公网IP,免费内网穿透】
  16. P1554 梦中的统计
  17. 聊聊win 7回收站 回收站技巧大公开【xitongshoucang.com】
  18. 为什么 C++ 中成员函数指针是 16 字节?
  19. 2021小微企业补贴条件
  20. PDF文件破解打开密码

热门文章

  1. Kali忘记root密码强制更改办法
  2. 分数2在切片中,如果结束素引指定了一个超出字符串结尾的位置,Pyth0将使用
  3. python后端工程师简历_【社招】字节跳动 - 后端开发工程师( Python Golang)-懂车帝...
  4. ROS2学习笔记22--使用launch启动/监听多个node节点
  5. C语言学习笔记之初识
  6. 学习java被虐千百遍
  7. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest 一些题解
  8. LTE中PA/PB的理解
  9. Linux网卡模块,裁剪Linux并实现网卡模块的安装(附有命令移植的脚本)
  10. 解决集群报failure to login: for principal 。。。。Unable to obtain password from user错误