思想

map函数:处理一组key/value对进而生成一组key/value对的中间结果

reduce函数:将具有相同Key的中间结果进行归并


实现

环境

普通带宽,上千台机器(失败变得正常),廉价硬盘,调度系统。

执行过程

  1. 文件划分
  2. master分派map和reduce任务
  3. 执行map函数
  4. 中间结果缓存和位置传递
  5. 执行reduce函数
  6. 生成最终结果文件
  7. 结果返回

Master是将中间结果文件从map task传递到reduce task的渠道。

保存:对于每个完成的map task,master会保存由它产生的R个中间结果文件的大小及位置。

收到:中间结果信息上报:当map task结束后,将会受到对于这些位置和大小信息的更新。

推送:中间结果信息(位置+大小)会被逐步推送到那些包含正在处理中国的reduce task 的worker

容错:

标记失败:Master周期性地ping每个worker。一定时间内无响应则标记失败。

重新执行:标记失败worker上的完成状态任务需要重新执行,因为中间结果仍保存在失败机器上。

Master失败:从上次检查点状态恢复拷贝。

本地化:输入和中间结果本地存取。

任务粒度:

R个map task 和 M各reduce task,M和R都应当远远大于运行worker的机器数目。

优点:

提高动态负载平衡。

加速worker失败后的恢复过程。

M的选择:使每个独立task输入数据限制在16M到64M之间。

R的选择:大概是使用worker机器的几倍。

备份任务:

长尾:花费相当长的时间去完成MapReduce任务中最后剩下的极少数的那几个task的那台机器。

解决:当MapReduce任务接近尾声的时候,master会备份那些还在执行的task,只要该task的主本或者一个副本完成了,我们就认为它完成了。


技巧

  1. 划分函数
  2. 有序化保证:中间结果的key/value对是按照key值的增序进行处理
  3. 合并函数:每个reduce task部分归并
  4. 输入和输出类型:预定义的类型就足够了
  5. 副作用:map和reduce操作过程中产生一个文件作为额外输出,应用程序编写者保证这些操作的原子性以及幂等性(backup机制)
  6. 跳过坏记录:一种可选模式,在该模式下,MapReduce库会检测哪些记录会引发crash,然后跳过它们继续执行。
  7. 本地执行:调试和小规模测试可以再本地串行执行
  8. 状态信息:web页面
  9. 计数器:MapReduce库提供了一些计数器设施来计算各种事件的发生。

MapReduce优点:

  1. 模型容易使用,隐藏了并行化、容错、本地化优化、负载平衡的细节
  2. 大量的问题可以简单地用MapReduce计算来表达
  3. 可以扩展到数千台机器上

参考资料:

《google系列论文》- MapReduce

Google论文系列(2) MapReduce的更多相关文章

  1. Google论文之三----MapReduce

    Google论文之三----MapReduce MapReduce:大型集群上的简单数据处理 摘要 MapReduce是一个设计模型,也是一个处理和产生海量数据的一个相关实现.用户指定一个用于处理一个 ...

  2. 转:Google论文之三----MapReduce

    文章来自于:http://www.cnblogs.com/geekma/p/3139823.html MapReduce:大型集群上的简单数据处理 摘要 MapReduce是一个设计模型,也是一个处理 ...

  3. hadoop系列四:mapreduce的使用(二)

    转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...

  4. [转]玩转Google开源C++单元测试框架Google Test系列

    gtest的官方网站是: http://code.google.com/p/googletest/ 从官方的使用文档里,你几乎可以获得你想要的所有东西 http://code.google.com/p ...

  5. 转:玩转Google开源C++单元测试框架Google Test系列

    转自http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 前段时间学习和了解了下Google的开源C++单元测试框架Google ...

  6. 玩转Google开源C++单元测试框架Google Test系列(转载)

    越来越多公司采用敏捷开发,单元和回归测试越来越重要,GTest作为最佳C++单元测试工具越来越多的被使用.转自 http://www.cnblogs.com/coderzh/archive/2009/ ...

  7. Google的PageRank及其Map-reduce应用(日志五)

    上一篇:Hadoop的安装(日志四) 1,算法的原理解释: 如下图所示,G就是传说中的谷歌矩阵,这个矩阵是n*n型号的,n表示共计有n个网页. 如矩阵中所示: 11位置处的元素,是表示第一个网页指向的 ...

  8. hadoop系列三:mapreduce的使用(一)

    转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/7224772.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的 ...

  9. 读论文系列:Deep transfer learning person re-identification

    读论文系列:Deep transfer learning person re-identification arxiv 2016 by Mengyue Geng, Yaowei Wang, Tao X ...

随机推荐

  1. 用gdb理解C宏(#和##)

    在Unix/Linux内核代码以及GNU libc源代码中,有两个C的宏被广泛使用. 例如: /* glibc-2.25/sysdeps/powerpc/powerpc64/sysdep.h */ # ...

  2. json-c开发指南

    网上看到的一片关于json-c的文章.收藏一下,忘记了出处,尽请作者谅解. JSON c语言开发指南   1.    引言 本文档是基于json-c 库对数据交换进行开发所编写的开发指南,及详细解释j ...

  3. Delphi下OpenGL2d绘图(03)-画线

    一.前言 画线与画点基本上代码是相同.区别在于glBegin()的参数.绘制的框架代码可以使用 Delphi下OpenGL2d绘图(01)-初始化 中的代码.修改的部份为 Draw 函数的内容. 二. ...

  4. 通过POST请求上传文件

    转自:https://blog.csdn.net/zhangge3663/article/details/81218488 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交 ...

  5. A记录,CNAME,MX记录,TTL

    A记录 A记录是用来指定主机名(或域名)对应的IP地址记录.用户可以将该域名下的网站服务器指向到自己的web server上.同时也可以设置您域名的二级域名. MX记录 MX记录邮件路由记录,用户可以 ...

  6. C# 工具类之数据库链接

     一.SQL Server 相关 /// <summary> /// 数据库的通用访问代码 /// 此类为抽象类, /// 不允许实例化,在应用时直接调用即可 /// </summa ...

  7. Spring定时(任务)刷新-quartz

    Quartz是一个完全由java编写的开源作业调度框架.他可以与J2EE.J2SE集成,用与处理定时任务.定时刷新的需求.此处使用为与Spring项目集成. 在SpringMVC项目中使用quartz ...

  8. Echarts 有点难度的柱状图

    本次的难点在于交叉传数据,又要把四组20个不同日期 显示上! 先看效果图: 数据传递方式:图 function func_echarts_2ba() { var echarts_2bar = echa ...

  9. 【C#】权限修饰符

    这个看了蛮多遍的,但是由于有一些一直不用,老是忘记,记录一下:) private  成员只能由同一个类(class)类型中的其他成员访问. family  成员可由派生类访问,不管那些类型是否在用一个 ...

  10. 十一、curator recipes之联锁InterProcessMultiLock

    简介 curator实现了一个类似容器的锁InterProcessMultiLock,它可以把多个锁包含起来像一个锁一样进行操作,简单来说就是对多个锁进行一组操作.当acquire的时候就获得多个锁资 ...