大数据技术原理——期末复习mapreduce

1、MapReduce工作流程(输入、输出、中间结果处理(合并、归并、排序)、Reduce输出、数据如何传递)

 

核心:分而治之

描述:把一个大的数据集拆分成多个小数据集在多台机器上并行处理。即一个大的MapRednce作业,先会被拆分成许多个Map任务在多台机器上并行执行,每个Map任务运行在数据存储的节点上。使得计算和数据可以放在一起运行,不需要额外的数据传输开销。当Map任务结束后,会生成以<key,value>形式的许多中间结果。然后,这些中间结果会被分发到多个Reduce任务在多台机器上并行执行,具有相同key的<key,yalue>会被发送到同一个Reduce任务,Reduce任务会对中间结果进行汇总计算得到最后结果,并输出到分布式文件系统。

注意:1)不同Map任务之间不会进行通信,不同Reduce任务之间不会发生任何信息交换;用户不能显式地从一台机器向另—台机器发送消息,所有的数据交换都是通过MapReduce框架自身去实现的。
2)在MapReduce的整个执行过程中,Map任务的输人文件、Reduce任务的处理结果都保存在分布式文件系统中的,而Map任务处理得到的中间结果保存在本地存储中(如磁盘)。

  1. 只有当Map处理全部结束后,Reduce过程才能开始;只有Map才需要考虑数据局部性,实现“计算向数据靠拢”,Reduce无须考虑数据局部性。

2、MapReduce执行的各个阶段

InputFormat模块MapReduce框架使用InputFormat模块做Map前的预处理,然后,将输入文件切分为逻辑上的多个InputSplit, InputSplit 是MapReduce对文件进行处理和运算的输入单位,是一个逻辑概念, 每个InputSplit没有对文件进行实际切割,只记录了要处理的数据的位置和长度。

输入给Map任务InputSplit 是逻辑切分而非物理切分,所以,需要通过RecordReader (RR)根据InputSplit中的信息来处理InputSplit中的具体记录,加载数据并转换为适合Map任务读取的键值对,输入给Map任务。

中间结果处理(Shuffle:Map任务会根据用户自定义的映射规则,输出一系列的<key,value>作为中间结果。为了让Reduce可以并行处理Map的结果,需要对Map的输出进行-一定的分区、排序(Sort)、合并( Combine)、归并( Merge)等操作,得到<key,<value-list>>形式的中间结果, 再交给对应的Reduce进行处理。Reduce 以一系列<key,value-list>中间结果作为输入,执行用户定义的逻辑,输出结果给OutputFormat模块。

Reduce输出OutputFormat 模块会验证输出目录是否已经存在以及输出结果类型是否符合配置文件中的配置类型,如果都满足,就输出Reduce的结果到分布式文件系统。

3、WordCount执行过程实例

WordCount程序任务 

程序 WordCount

输入 一个包含大量单词的文本文件

输出 文件中每个单词及其出现次数(频数),并按照单词字母顺序排序,每个单词和其频数占一行,单词和频数之间有间隔

实例 

输入  Hello World   Hello Hadoop     Hello MapReduce

输出  Hadoop 1      Hello 3          MapReduce 1       World 1

 

 

 

 

  1. 应用

• 首先,需要检查计算任务是否可以采用MapReduce来实现

• 其次,确定MapReduce程序的设计思路

• 最后,确定MapReduce程序的执行过程

关系代数运算

• 关系数据库中的关系可以看成由一系列属性组成的表

– 关系中的行称为元组

– 属性的集合称为关系的模式

• 关系的选择运算

– 过程

– Map函数

– Reduce函数:恒等式

• 关系的投影运算关系R的投影是从关系R中选择出若干属性列组成新的关系。

分为两步:

1、选择出指定的属性,形成一个可能含有重复行的表。

2、删除重复行,形成新的关系。关系模式中R(A1,A2,...An),t∈R表示t是R的一个元组,其中A为R中的属性列。t[Ai]则表示元组t中相应于属性Ai的一个分量。投影的运算表达式为:

 

 

– Map函数:

– Reduce函数

关系的并

– Map任务将两个关系的元组转换成键值对<t,t>,Reduce任务则是

一个剔除冗余数据的过程

• 关系的交

– 使用与并集相同的Map过程。在Reduce过程中,如果键t有两个

相同值与它关联,则输出一个元组<t,t>,如果与键关联的只有一

个值,则输出NULL

• 关系的差

– 对两个关系求差时,Map过程产生的键值对不仅要记录元组的信息,还要记录该元组来自哪个关系(R或S)。Reduce过程中将键值相同的t合并后,与键t相关联的值如果只有R(说明该元组只属于R,不属于S),就输出元组,其他情况均为空值

• 关系的自然连接

– 在连接运算当中,一种最常用的连接是自然连接。

– 如果关系R与S具有相同的属性组B,且该属性组的值相等时的连接称为自然连接

 

 

• 假设有关系R(A,B)和S(B,C),对二者进行自然连接操作

• 使用Map过程,把来自R的每个元组<a,b>转换成一个键值对<b, <R,a>>,其中的键就是属性B的值。把关系R包含到值中,这样做使得我们可以在Reduce阶段,只把那些来自R的元组和来自S的元组进行匹配。类似地,使用Map过程,把来自S的每个元组<b,c>,转换成一个键值对<b,<S,c>>

• 所有具有相同B值的元组被发送到同一个Reduce进程中,Reduce进程的任务是,把来自关系R和S的、具有相同属性B值的元组进行合并

• Reduce进程的输出则是连接后的元组<a,b,c>,输出被写到一个单独的输出文件中

 

 

分组聚合运算

典型例子

– 词频统计

– 即在Map过程中,选择关系的某一字段(也可 以是某些属性构成的属性表)的值作为键,其他字段的值作为与键相关联的值。

– 该键值对输入Reduce过程后,对相同键关联的值施加某种聚合运算,如求和、计数、AVG

、MIN和MAX等,输出则为<键,聚合运算结果

矩阵—向量乘法、矩阵乘法

矩阵分割

 

 

 

 

 

• 如果n值过大,使得A和B无法完全放入内存,那么,在计算过程中需要

多次将矩阵的一部分导入内存,这会导致大量的磁盘访问。

• 一种替代方案:将矩阵A分割成多个(假设k个)宽度相等的垂直条,

将矩阵B分割程k个宽度相等的水平条

• A中每个垂直条实际上是一个A(m ,n/k)矩阵

• B中每个水平条实际上是一个B(n/k,l)矩阵

• 矩阵第i个垂直条和第i个水平条相乘。因此,可以将矩阵A的每个条存

成一个文件,同样,将矩阵B的每个条存成一个文件。矩阵A某个条的

一个文件和对应的矩阵B的条输送到每个Map任务,然后,Map任务和

Reduce任务可以按照上述过程来运行。

  1. 单词统计

词频统计程序WordCount的设计

 

 

 

  1. 求最大值。

给出MapReduce执行过程

首先对输入数据要进行一定的处理,将代找的数据设置为key。如果reducer大于1,可以设置partitioner将数据分多个桶,最后只需要在多个job完成的part中找到最后一个元素(正序。最后一个即最大值)即可。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小步调LLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值