Google论文系列(2) MapReduce

思想
map函数:处理一组key/value对进而生成一组key/value对的中间结果
reduce函数:将具有相同Key的中间结果进行归并

实现
环境
普通带宽,上千台机器(失败变得正常),廉价硬盘,调度系统。
执行过程
- 文件划分
- master分派map和reduce任务
- 执行map函数
- 中间结果缓存和位置传递
- 执行reduce函数
- 生成最终结果文件
- 结果返回
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的主本或者一个副本完成了,我们就认为它完成了。
技巧
- 划分函数
- 有序化保证:中间结果的key/value对是按照key值的增序进行处理
- 合并函数:每个reduce task部分归并
- 输入和输出类型:预定义的类型就足够了
- 副作用:map和reduce操作过程中产生一个文件作为额外输出,应用程序编写者保证这些操作的原子性以及幂等性(backup机制)
- 跳过坏记录:一种可选模式,在该模式下,MapReduce库会检测哪些记录会引发crash,然后跳过它们继续执行。
- 本地执行:调试和小规模测试可以再本地串行执行
- 状态信息:web页面
- 计数器:MapReduce库提供了一些计数器设施来计算各种事件的发生。
MapReduce优点:
- 模型容易使用,隐藏了并行化、容错、本地化优化、负载平衡的细节
- 大量的问题可以简单地用MapReduce计算来表达
- 可以扩展到数千台机器上
参考资料:
《google系列论文》- MapReduce
Google论文系列(2) MapReduce的更多相关文章
- Google论文之三----MapReduce
Google论文之三----MapReduce MapReduce:大型集群上的简单数据处理 摘要 MapReduce是一个设计模型,也是一个处理和产生海量数据的一个相关实现.用户指定一个用于处理一个 ...
- 转:Google论文之三----MapReduce
文章来自于:http://www.cnblogs.com/geekma/p/3139823.html MapReduce:大型集群上的简单数据处理 摘要 MapReduce是一个设计模型,也是一个处理 ...
- hadoop系列四:mapreduce的使用(二)
转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...
- [转]玩转Google开源C++单元测试框架Google Test系列
gtest的官方网站是: http://code.google.com/p/googletest/ 从官方的使用文档里,你几乎可以获得你想要的所有东西 http://code.google.com/p ...
- 转:玩转Google开源C++单元测试框架Google Test系列
转自http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 前段时间学习和了解了下Google的开源C++单元测试框架Google ...
- 玩转Google开源C++单元测试框架Google Test系列(转载)
越来越多公司采用敏捷开发,单元和回归测试越来越重要,GTest作为最佳C++单元测试工具越来越多的被使用.转自 http://www.cnblogs.com/coderzh/archive/2009/ ...
- Google的PageRank及其Map-reduce应用(日志五)
上一篇:Hadoop的安装(日志四) 1,算法的原理解释: 如下图所示,G就是传说中的谷歌矩阵,这个矩阵是n*n型号的,n表示共计有n个网页. 如矩阵中所示: 11位置处的元素,是表示第一个网页指向的 ...
- hadoop系列三:mapreduce的使用(一)
转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/7224772.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的 ...
- 读论文系列:Deep transfer learning person re-identification
读论文系列:Deep transfer learning person re-identification arxiv 2016 by Mengyue Geng, Yaowei Wang, Tao X ...
随机推荐
- web开发之缓存
以数据为驱动的web站点,当访问量增大后,由于频繁的从DB中读取数据,使得DB服务器的压力大增,从而影响系统的性能.为了缓解这种来自于大访问量的频繁读取DB的压力,我们可以把一些数据缓存起来,当请求过 ...
- InterView之C/CPP
CPP 引用 什么是"引用"?申明和使用"引用"要注意哪些问题? 答:引用就是某个目标变量的别名(alias),对应用的操作与对变量直接操作效果完全相同.申明一 ...
- 使用gdb进行写操作
使用gdb调试程序,读写操作是很普遍的事情.其中,读操作包括: 读取某个变量的值 读取某个内存地址里的内容 读取某个寄存器的值 对应地,写操作包括: 修改某个变量的值 修改某个内存地址里的内容 修改某 ...
- 安装mysql解压 版
记录:win10重装系统后,注册mysql服务 其实在重装系统时如果不格式化mysql所在的盘,我们的mysql是不需要重装的 操作: 1.创建mysql服务: 开始-->运行-->c ...
- C#泛型设计的一个小陷阱.
距离上次发表博客已经有几年了. 对于没能坚持更新博客,实在是感觉到甚是惭愧. 闲言少叙, 直接切入主题. 背景 最近一直在对于公司一个网络通信服务程序使用.net core 进行重构.重构的目的有两个 ...
- ajax从零基础到实战
一. 什么是AJAX? ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 二. 在项目中怎么运用AJAX? 项目主要文件夹目录有img文件夹,css文件夹,js文件夹,如果你要运 ...
- 微信小程序随笔。笔记本忘家里了
所有ui组件都有的共有属性id.class.style.hidden.data-*.bind* / catch*.
- c#项目代码风格要求
代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释 ...
- C# AJAXform上传图片
前台: @{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="vie ...
- [编程] C语言结构体指针作为函数参数
结构体指针作为函数参数:结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针.如果结构体成员较多,尤其是成员为数组时,传送的时间和空间 ...