文档章节

Google MapReduce整理

BeGit
 BeGit
发布于 2017/02/09 15:35
字数 1939
阅读 70
收藏 1

一,基本了解

1.MapReduce关心的是如何划分超大集数据和在大量计算机组成的集群上调度。

2.对于海量数据想在短时间内完成处理,我们只要简单描述运算的规则,而不用关心并行,分布,容错,负载均衡等复杂细节。他的原理来源并非没有来源,是参考了一些函数语言的实用原理,都会有一组逻辑输入用Map处理后得到一组中间值,再Reduce合并中间数据,得到一个想要的目的结果。

3.Map函数可以合并相同k-v pair集合成一个较小的v集合。注意的是我们可以通过迭代的方式把v传递给Reduce函数,这样就可以处理无法全部放入内存中的大量value值的集合了。

4.分布式文件系统通过数据复制来保证在不同硬盘上数据的有效和可靠性。

5.提交job,一个job包括一系列task,调度系统将任务调度到集群多台可用机器上(实际就是HDFS文件系统控制管理的分布式文件系统)。尽量让调度算法和要计算的数据靠近。

6.然后统计成中间pair,然后传递给reduce合并成结果集。

二,执行概括

这个是比较核心的执行流程了。基本就是在集群中创建多个工作副本,把map或reduce任务发送到空闲的worker执行。map能解析出key/pair对,然后传递给用户自定义的map函数,定期输出到缓存中(这个会进行分区),完毕后,master通知reduce读取中间值,在排序后将key和value集合传递到reduce函数,处理后输出为分割的文件,作为其他的MapReduce过程的数据输入和其他分布式的数据输入。

三,容错

1.map处理完毕后会通过master逐步的推送给那些正在工作的reduce任务。

2.master可以定期的ping worker看是否正常,worker完成的map任务会重设空闲装填,会重新安排给worker,如果有worker失效,运行的map,reduce任务也将等待被被重新分配。map执行结果在执行的机器中,故障需重新执行。reduce输出在全局文件系统,不需要重新执行。

3.因为前期的数据文件是已经被分割了的,所以只需要重新执行时效的map任务就可以。(分工)

4.master会定期的写一个checkpoint,如果master失效会从一个checkpoint恢复保存的worker和map,reduce数据结构。因为master进程比较重,失效的话会返回给用户状态,让用户决定是否重新执行map,reduce任务。

5.分布式系统应该也是输入确定性函数。

6.map对应R个私有文件,reduce对应1个私有文件,完成map会通知master将数据记录在数据结构中。

7.一个任务是可能在多个机器上执行的。如一个reduce任务在多个机器执行后会把临时文件重命名为一个文件(由文件系统保证)。较弱的失效处理没太明白(先认为一般情况是非失效的)

四,存储

1.存储位置策略决定了网络带宽的利用,map任务调度时,会将任务先调度到HDFS副本输入数据所在的机器上或附近机器上尽量避免跨网络造成大量传输数据。

2.M/R的数量有一个worker的均衡的比例。

3.备用任务是在接近M/R任务尾声时,用备用master执行剩余的任务,完成就完成。这样可以利用百分之几的资源节省更多的时间。

五,技巧

1.在MAP执行完后再使用分区函数时的函数也能决定分区的位置。

2.对应按key随机存取,有顺序就变的有意义了。

3.combiner函数会在执行完map的机器上先合并一次数据结果然后发送给reduce函数,显著的提高了执行的效率。

4.输入/输出类型,输入可以由一个reader来控制是从文件或数据库读取数据,或输出一个用户添加的类型。条件是可以当成key/pair来处理数据。

5.副作用,如果是跨文件一致性要求的任务,必须是确定性的任务。

6.master会记录内存段或总bus中导致确定性crush的记录,下次执行时会跳过这些记录。

7.map/reduce比较难debug,所以有一套Map/Reduce库的本地实现版本。

8.状态信息可以记录各个worker的任务情况和进度,失效worker等,可以估算时间和分析。

9.计数器可以作为合并的数据结果和执行完毕后结果验证正确性。

10.对于中间排序会采样key分布情况进行分区。

11.看到读取时间少些,处理后就渐渐开始向reduce传输数据,有备份master节点的执行效率要好些。kill掉了几个worker进程影响不是很明显。

六,经验

1.输入数据本地化,动态负载均衡。

2.mapreduce的成功处在于1.可以用mapreduce库不到半小时写一个简单的程序,这个程序可以在上千的机器上做大规模并发处理。2.可以让没有分布式并发开发经验的程序员很容易利用大量资源开发并发分布式应用程序。

3.容错,分布式,并行计算都是mapreduce提供的。

七,总结

1.mapreduce可以看成是真实世界处理海量数据的经验,是对经典模型的的简化和萃取的成果。

2.对于容错它做了上千台机器集群中的处理,而一般的是小规模集群的还交给了程序员处理。

3.高级抽象模型限制编程模型,数据本地优化策略,备用机制和忽略故障,集群机制,排序机制,编程模型缩短操作时间,

八,结束语

1.并行,容错,数据本地化,负载均衡被封装;没有并发分布能力的可以使用;编程简单;如排序搜索,数据挖掘,机器学习;解决了数千台机器集群上灵活部署运行MapReduce;简单有效利用计算机资源解决需要大量计算的问题。这些思量都有一些其他框架和应用思想的解决来源。

2.减少网络带宽,数据本地化(速度和网络带宽),重复执行相同任务(备用master接近完成时启动执行,节省了资源利用不平衡问题。这个我觉得还不够智能,因为只能是在接近完成,中间什么地方出现问题可能就不容易进行了,目前可能尝试过几次也只能跳过了)。

 

 

 

 

 

© 著作权归作者所有

BeGit
粉丝 20
博文 93
码字总数 71312
作品 0
顺义
后端工程师
私信 提问
Boost.MapReduce

看着Boost.MapReduce是不是觉得跟Boost有关系?其实它只是以前放在Boost代码库的一个开源软件。它有几个不同与Google MapReduce和Hadoop的地方: 它更Google使用的MapReduce一样是C++实现的,...

开源中国驻成都办事处
2012/05/14
542
0
什么是 Hadoop 生态系统

https://www.facebook.com/hadoopers 在一些 Teiid 的一些文章和示例上都会有关于 JBoss Data Virtualization (Teiid) 通过 Hive 使用 Hadoop 作为数据源的信息。当使用 Hadoop 环境创建 Da...

oschina
2015/07/30
11.1K
10
大数据(hadoop-Mapreduce原理架构)

课程目标: 1:MapReduce的应用场景 2:MapReduce编程模型 3:MapReduce的架构 4:常见MapReduce应用场景 5:总结 MapReduce的定义 源自于Google的MapReduce论文 发表于2004年12月 Hadoop M...

这很耳东先生
04/30
27
0
阿里云 E-MapReduce产品优势及使用场景

E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 产品优势: 与自建集...

凹凹凸曼
2018/09/12
0
0
从分治算法到 MapReduce

从分治算法说起 要说 MapReduce 就不得不说分治算法,而分治算法其实说白了,就是四个字 分而治之 。其实就是将一个复杂的问题分解成多组相同或类似的子问题,对这些子问题再分,然后再分。直...

终日而思一
2018/11/23
38
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部