一.概要

  • 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. springboot yml怎么建常量_【Java】SpringBoot 中从application.yml中获取自定义常量
  2. JAVA WEB部分易混淆问题总结
  3. Python 析构方法__del__
  4. 秒懂边缘云 | 边缘云技术进阶
  5. Android新闻案例clientserver达到,完全自己的新闻节目平台
  6. 【Azure Show】|第七期 特别版线上沙龙直播回顾. 嘉宾张坤段清华谭国欣柯克黄炜锵...
  7. 使用鸢尾花数据集实现一元逻辑回归、多分类问题
  8. 华为EMUI10的美学哲思:让美不止初见
  9. npm run build 出错 npm: 6.5.0-next.0 should be = 3.0.0
  10. python如何写代码_如何写出优雅的Python代码?
  11. 史秀峰计算机网络技术与应用第二版,史秀峰版《计算机网络技术与应用》期中测试.doc...
  12. shell如何快速执行上一个命令的最后一个参数
  13. Linux课程设计:Linux系统下多进程的创建与通信
  14. yii2 找到根目录的绝对路径
  15. 小觅相机运行VINS-Fusion(三)——IMU的标定
  16. 【最优方案】合唱队形
  17. Redis 学习 - hiredis(官网 2021-01-06)
  18. ROS moveit cartesian_demo 机械臂笛卡尔空间路径速度限制
  19. 看呐!一群方言在舌尖跳舞
  20. 经典游戏打砖块(粗糙版)

热门文章

  1. python html做界面_如何用EEL(python库)打开一个新的HTML页面?
  2. 游戏技能效果与buff设定
  3. 记录软考上午题1计算机系统之1.2 计算机体系结构及真题
  4. 微信程序开发小程序交互
  5. win10开机自启动在哪里设置(Win10设置开机自启动)
  6. OpenCV读取海康4G摄像头
  7. 前端面试题汇总(含答案)(HTML+CSS篇)
  8. 内地移动支付全球领先?醒醒吧,香港在这5个方面已赶超内地了!
  9. 数字功放音质好不好?从哪些地方看
  10. SharePoint专家新闻轮转器WebPart----亲测力推之Web部件