MapReduce
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
虚拟化与云计算
天津大学软件学院
11
Input key*value pairs
Input key*value pairs
...
map
Data store 1 Data store n
map
(key 1, values...)
(key 2, values...)
(key 3, values...)
(key 1, values...)
虚拟化与云计算
天津大学软件学院
22
MapReduce的优化
跳过有问题的记录
一些特定的输入数据常导致Map/Reduce无法运行 调试或者修改 在每个worker里运行一个信号处理程序,捕获map或 reduce任务崩溃时发出的信号,一旦捕获,就会向 master报告,同时报告输入记录的编号信息。如果 master看到一条记录有两次崩溃信息,那么就会对该 记录进行标记,下次运行的时候,跳过该记录
虚拟化与云计算
天津大学软件学院
18
MapReduce的并行执行
虚拟化与云计算
天津大学软件学院
19
MapReduce的容错
Worker故障
Master 周期性的ping每个worker。如果master在一个 确定的时间段内没有收到worker返回的信息,那么它 将把这个worker标记成失效 重新执行该节点上已经执行或尚未执行的Map任务 重新执行该节点上未完成的Reduce任务,已完成的不 再执行
(key 2, values...)
(key 3, values...)
== Barrier == : Aggregates intermediate values by output key key 1, intermediate values reduce key 2, intermediate values reduce key 3, intermediate values reduce
虚拟化与云计算 天津大学软件学院 31
其他示例
倒排索引 map函数分析每个文档,然后产生一个(词,文档 号)对的序列.reduce函数接受一个给定词的所 有对,排序相应的文档IDs,并且产生一个(词,文 档ID列表)对.所有的输出对集形成一个简单的 倒排索引 分布式排序 map函数从每个记录提取key,并且产生一个 (key,record)对.reduce函数不改变任何的对.
reduce(String output_key, Iterator intermediate_values): // output_key: a word // output_values: a list of counts int result = 0; for each v in intermediate_values: result += ParseInt(v); Emit(AsString(result));
虚拟化与云计算 天津大学软件学院 30
其他示例
翻转web-link图 在每个作为源的页面中,检查其连接URL,并逐个 输出<target,source>元组。 reduce函数将连接到每个target的所有source组合 起来,形成list列表,输出<target,list(source)> 每个站点的术语向量 术语向量表示出在一篇文章中或者一组文章中最重 要的单词,通常以<word,frequency>元组的方式。 map函数输出每个文章的 <hostname,term vector> (hostname通过文章的URL分析得到)。 reduce函数取出不常用的术语,将其余的相加,得 到最终的<hostname,term vector>对
天津大学软件学院
14
Shuffle 和 Sort
当Map 开始产生输出时,并不是简单的把数据写到磁盘,因为频繁 的磁盘操作会导致性能严重下降。它的处理过程更复杂,数据首先是 写到内存中的一个缓冲区,并进行预排序,以提升效率。
虚拟化与云计算
天津大学软件学院
15
Combiner
虚拟化与云计算
天津大学软件学院
虚拟化与云计算
天津大学软件学院
27
MapReduce示例:单词计数
使用MapReduce求解该问题 Step 4:通过Reduce操作生成最后结果
虚拟化与云计算
天津大学软件学院
28
MapReduce示例:单词计数
使用MapReduce求解该问题 定义Map和Reduce函数
map(String input_key, String input_value): // input_key: document name // input_value: document contents for each word w in input_value: EmitIntermediate(w, "1");
虚拟化与云计算
天津大学软件学院
23
MapReduce示例:单词计数
案例:单词记数问题(Word Count) 给定一个巨大的文本(如1TB),如何计算单 词出现的数目?
虚拟化与云计算
天津大源自文库软件学院
24
MapReduce示例:单词计数
使用MapReduce求解该问题 Step 1: 自动对文本进行分割
16
Combiner
虚拟化与云计算
天津大学软件学院
17
并行化
map()函数可以并行执行,为不同的输入数据 集生成不同的中间结果 reduce()函数也可以并行执行,分别处理不同 的output key map和reduce的处理过程中不发生通信 瓶颈: 只有当map处理全部结束后,reduce过程才能 够开始
虚拟化与云计算 天津大学软件学院 2
简单的问题,计算并不简单!
计算问题简单,但求解困难 待处理数据量巨大(PB级),只有分布在 成百上千个节点上并行计算才能在可接受 的时间内完成 如何进行并行分布式计算? 如何分发待处理数据? 如何处理分布式计算中的错误?
虚拟化与云计算
天津大学软件学院
虚拟化与云计算 天津大学软件学院 7
MapReduce
mapping和reducing函 数接收数值(键,值)对 mapper可能把一个输入 map为0个,1个或100 个输出 reducer可能计算超过一 个的输入列表并生成一个 或多个不同的输出
虚拟化与云计算 天津大学软件学院 8
MapReduce编程模型
用户只需要实现两个函数接口: map(in_key, in_value) -> (out_key, intermediate_value list) reduce(out_key, intermediate_value list) ->out_value list 输入的key和value的类型和输出的类型可以 是不同的
虚拟化与云计算
天津大学软件学院
21
MapReduce的优化
本地处理
Master 调度策略: • 向GFS询问获得输入文件blocks副本的位置信息 • Map tasks 的输入数据通常按 64MB来划分 (GFS block 大小) • 按照blocks所在的机器或机器所在机架的范围进行 调度 效果 • 绝大部分机器从本地读取文件作为输入,节省大量 带宽
虚拟化与云计算
天津大学软件学院
25
MapReduce示例:单词计数
使用MapReduce求解该问题 Step 2:在分割之后的每一对<key,value>进行 用户定义的Map进行处理,再生成新的 <key,value>对
虚拟化与云计算
天津大学软件学院
26
MapReduce示例:单词计数
使用MapReduce求解该问题 Step 3:对输出的结果集归拢、排序(系统自动完 成)
虚拟化与云计算
天津大学软件学院
29
其他示例
分布式检索 map函数挑选出满足特定模式的行,并将其组 装成元组输出。 reduce函数是一个简单的确认函数,它完成的 工作仅仅是将中间元组拷贝到输出中。 计算URL访问频率 map函数处理web网页的访问日志,并输出 <URL,1>。 reduce函数将每个URL的访问次数加起来,输 出<URL,total count>
map操作结束后,所有与某指定out key相对 应的中间结果组合为一个列表(list)。 reduce()函数将这些中间结果组合为一个或多 个对应于同一output key 的 final value 每一个output key通常只有一个final value reduce()个数可以为0个或多个
Google MapReduce 架构设计师 Jeffrey Dean
From: http://googlesystem.blogspot.com/2006/09/how-much-data-does-google-store.html 虚拟化与云计算 天津大学软件学院 4
MapReduce特性
自动实现分布式并行计算 容错 提供状态监控工具 模型抽象简洁,程序员易用
虚拟化与云计算
天津大学软件学院
6
MapReduce特性
MapReduce程序是设计用来并行计算大规模海量数据 的,这需要把工作流分划到大量的机器上去,如果组件 (component)之间可以任意的共享数据,那这个模型 就无法扩展到大规模集群上去(数百或数千个节点),用 来保持节点间数据的同步而产生的通信开销会使得系统在 大规模集群上变得不可靠和效率低下 所有在MapReduce上的数据元素都是不可变的,这就 意味着它们不能够被更新。如果在一个mapping任务中 你改变了一个输入键值对,它并不会反馈到输入文件;节 点间的通信只在产生新的输出键值对 ((key,value)pairs)时发生,Hadoop系统会把这些 输出传到下一个执行阶段。
Master故障
定期写入检查点数据 从检查点恢复
虚拟化与云计算
天津大学软件学院
20
MapReduce的优化
任务备份机制 慢的workers 会严重地拖延整个执行完成的时间
• 由于其他的任务占用了资源 • 磁盘损坏
解决方案:推测性的执行(Speculative execution) 在即将完成时,备份任务 多个worker同时进行相同的任务 任何一个完成均可 可以十分显著地提高执行效率
MapReduce
天津大学软件学院
MapReduce起源:Google搜索
每一次搜索
200+ CPU 200TB以上数据 1010 CPU周期 0.1秒内响应 5¢广告收入
From: www.cs.cmu.edu/~bryant/presentations/DISC-FCRC07.ppt
final key 1 values
final key 2 values
final key 3 values
虚拟化与云计算
天津大学软件学院
12
任务执行过程
虚拟化与云计算
天津大学软件学院
13
文件存储位置
源文件:GFS Map处理结果:本地存储 Reduce处理结果:GFS 日志:GFS
虚拟化与云计算
虚拟化与云计算
天津大学软件学院
9
map
将数据源中的记录(文本中的行、数据库中条目 等)作为map函数中的key*value对 例如(filename, line) map()将生成一个或多个中间结果,以及与 input相对应的一个output key
虚拟化与云计算
天津大学软件学院
10
reduce
虚拟化与云计算
天津大学软件学院
5
MapReduce
函数式编程概念 函数是函数式编程的基本单位,函数几乎被用于一切, 包括最简单的计算,甚至变量都由计算取代。 函数值唯一地由其参数值所确定 纯函数式的程序没有变量和副作用 变量是不能更改的,所有变量只能被赋值一次 不必考虑函数调用顺序 函数式程序无需任何修改即可并行执行。不用担心死 锁和临界区
3
MapReduce:大规模数据处理
处理海量数据(>1TB) 上百/上千 CPU 实现并行处理 简单地实现以上目的
分而治之
Divide and Conquer
"Google Earth uses 70.5 TB: 70 TB for the raw imagery and 500 GB for the index data."