MapReduce学习笔记

来源:互联网 发布:蛇精吐火的软件 编辑:程序博客网 时间:2024/06/18 10:24

**

MapReduce学习笔记

**
首先,什么是Mapreduce?
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:

**1)**MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
**2)**MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
**3)**MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理 。

Map-Reduce集群运算时间问题解决方案
1.在多节点上冗余地存储数据, 以保证数据的持续性和一直可取性
2.将计算移向数据端, 以最大程度减少数据移动
3.简单的程序模型隐藏所有的复杂度

分布式文件系统
假设有数据块C0,C1,C2,C3,C4,C5,D0,D1等等
每个服务器最多放置四个数据块
服务器块1:C0,C1,C2,C5
服务器块2:C1,C3,C5,D0
服务器块3: C2,C4,D0,D1
……
服务器块N:C0,C3,C4,D1

 数据以“块状”形式在多台机器上存储
 每个数据块都会重复地在多台机器上存储
 保证数据的持续性和随时可取性

服务器块同时也作计算服务器,把运算挪向数据处
服务器块:
1.文件被分作16-64MB大小的连续块
2.每个文件块会被重复地存储2到3次
3.尽量保证重复的数据块在不同的机架上

主节点:
1.Hadoop的HDFS里叫做Name节点
2.存储元数据记录文件存储结构和地址
3.也可以重复

Map-Reduce:过程
words(doc.txt)| sort | uniq -c

Map
 逐个文件逐行扫描
 扫描的同时抽取出我们感兴趣的内容 (Keys)

Group by key
 排序和洗牌

Reduce
 聚合、总结、过滤或转换
 写入结果

总体框架都和上述描述过程一致
只是Map和Reduce函数要根据具体问题具体实现

map步:
根据输入的文本进行数字统计,提取我们感兴趣的东西配对key-value
group by key:
根据上述key-value按照key进行排序
reduce:
将已经排序好的的key-value进行合并,相同key的合并,value相加,输出新的key-value

例子:词频统计
以下是一个文本:
The crew of the space shuttle Endeavor recently returned to Earth as ambassadors, harbingers of
a new era of space exploration. Scientists at NASA are saying that the recent assembly of the Dextre bot is the first step in a long-term space-based man/mache partnership. ‘“The work we’re doing now – the robotics we’re doing – is what we’re going to need ……………………..

MAP: 读取输入文本产生一序列键值对
(The, 1)
(crew, 1)
(of, 1)
(the, 1)
(space, 1)
(shuttle, 1)
(Endeavor, 1)
(recently, 1)
……

按照key排序:将所有有相同key的键值对排在一起
(crew, 1)
(crew, 1)
(space, 1)
(the, 1)
(the, 1)
(the, 1)
(shuttle, 1)
(recently, 1)

Reduce:收集和统计对应同一个key的value并输出
(crew, 2)
(space, 1)
(the, 3)
(shuttle, 1)
(recently, 1)

启动多少个Map和Reduce任务呢?
M个Map任务和R个Reduce任务
实际操作经验法则:
通常情况下我们会让M远大于集群中的节点数
通常设置为一个分布式文件系统块一个Map任务
提升动态加载平衡,同时加速节点故障时的任务恢复
通常R比M要小
因为输出要分布在R个文件上

Map-Reduce改进与优化
改进1:很多时候一个Map任务为同一个key k会产生形如(k,v1), (k,v2)的键值对:
我们通过在Mapper中,进行预聚合(pre-aggregating)操作,来节约网络的时间成本。
合并 (k, list(v1)) → v2
合并器(combiner)通常和reduce函数是一致的
优点:后续步骤只需要传输和重组更少的数据即可
注意:只有在满足交换律和结合律的条件下,combiner才能起作用

改进2:分区函数
控制键值对是如何分区/划分的。保证指定key对应的键值对都分配到同一个reduce的worker中

原创粉丝点击