李雨倩-MapReduce 连接优化

Download Report

Transcript 李雨倩-MapReduce 连接优化

厦门大学数据库实验室
MapReduce 连接优化
报告人:李雨倩
导师:林子雨
2014.07.26
连接技术简介
基于传统 MapReduce 的连接
基于数据索引的连接
基于改进 MapReduce 的连接
连接技术比较
连接操作广泛应用于日志分析、联机分析处理及数据分析处理等方面。
如果提高大数据连接计算速度,则可提高数据分析效率和用户体验度。
下表对现有的MapReduce连接技术进行了分类与对比。
连接技术简介
基于传统 MapReduce 的连接
基于数据索引的连接
基于改进 MapReduce 的连接
基于传统 MapReduce 的连接
这类算法主要通过实现map函数、reduce函数及之间的数据流
传递,来完成数据连接运算。对于这方面的研究主要集中于两表
等值连接、两表非等值连接(又称θ连接)、两表相似度连接、多
表等值连接(星型连接、链式连接)、多表非等值连接等问题。
标准重分区算法
算法回顾
标准重分区算法由一个MapReduce作业来完成连接运算。两个表的数
welcome to use these PowerPoint templates, New
据都由 Mapper 读入,根据查询条件进行过滤intermediate,生成
Content
design,
10 years
experience
key
/valueintermediate
对,其中
key是待连接列的数值,
intermediate
valueintermediate则由用于标记数据来自哪个表的标签和记录值组成。在混
洗过程中,具有相同连接值的数据会被分到同一个Reducer上。
Reducer根据标签将数据分为两个集合,再完成连接运算。标准重分区
算法在Reducer上需要将数据全部装载到内存中,可能会造成内存溢出。
另外,当存在数据倾斜时,标准重分区算法容易造成数据分布不均,以
及连接速度缓慢和计算资源分布不均等问题。
改进的标准重分区算法
算法回顾
welcome
to use these PowerPoint templates, New
为了解决标准重分区算法需要占用较大内存的问题,改进的标准
重分区算法进行了以下优化:生成
keyintermediate/valueintermediate对时,
Content design, 10 years experience
keyintermediate值由待连接列的数值与表的标签共同构成,这样可以使
一个表的数据都排在另一个表的前面。在混洗阶段,通过自定义的
partition函数来使含有同一连接值的数据仍然分到同一个Reducer
上。在Reduce阶段,在内存中缓存较小的表,另一表以流式方式读
入并进行连接操作。
广播算法
算法回顾
welcome to use these PowerPoint templates, New
广播算法将待连接的两个表中较小的表以广播的方式传输
Content design, 10 years experience
到另一个表所在节点上,然后在该节点上进行连接操作。广
播算法只需要一个无Reduce的MapReduce作业就可以完成,
省去了数据混洗与排序的过程。当两表数据量相差很大时,
广播算法具有很高的效率。然而当待连接的两个表都很大时,
广播算法效率很低。
半连接算法
算法回顾
welcome to use these PowerPoint templates, New
半连接算法使用三个 MapReduce作业来完成运算,第一
Content design,
10 years experience
个MapReduce
作业生成第一个表S的连接值文件。第二个
MapReduce作业利用前一步生成的连接值文件,采用类似
广播算法的方法对第二个表R的数据进行过滤。第三个
MapReduce作业利用过滤后的R表数据,采用广播算法进行
连接。
分片半连接算法
算法简介
welcome to use these PowerPoint templates, New
分片半连接算法需要三个MapReduce作业来完成连接运
Content design, 10 years experience
算。第一个MapReduce作业对于表S的每一分片生成该分片
的连接值文件。第二个MapReduce作业根据表S的每一分片
的连接值与表R进行半连接,生成每一分片的连接文件。第
三个MapReduce作业读入前一步生成的每一分片的连接文
件,进行连接运算,生成最终结果。
分片半连接算法
半连接存在的一个问题是:并不是过滤后的R中的每条记录都
要和L(S)中的某分区做连接。分片半连接解决了这个问题。
等值连接
前面所介绍的标准重分区算法、改进标准重分区算法、
广播算法、半连接算法、分片半连接算法均属于等值连接
的算法,相对简单一些。
非等值连接
处理非等值连接时,由于不能预先知道两表值的分布情
况,需要处理比等值连接更加复杂的问题。下面介绍一个
利用一个MapReduce 作业处理非等值连接操作的算法。
非等值连接举例
Consider a join between data sets S and T with an inequality
condition like S.A <= T.A. Such joins seem inherently difficult for
MapReduce, because each T-tuple has to be joined not only
with S-tuples that have the same A value,but also those with
different (smaller) A values. It is not obvious how to map the
inequality join condition to a key-equality based computing
paradigm.
两个待连接数据集:S、T
连接条件: S.A <= T.A
MapReduce连接遇到的问题:一个T元组可能和一个或多个S元
组做连接。
非等值连接算法
算法简介
该算法利用一个二维矩阵来表示两表的笛卡儿积,通过对矩阵中满足运算
welcome
to use these PowerPoint templates, New
结果的范围进行标记的方法表示各运算所需要的数据。为了减少任务执行时间,
Content design, 10 years experience
并减小数据倾斜带来的影响,该算法对Reducer的输入量及输出量进行了均衡,
将矩阵分成面积相等的R个区域(region),每个区域都有一个RegionID。
在 map 函数中,对每一个记录可能参与运算的区域都生成一个<RegionID,
<Record,Tablename>>的键值对,在Reduce阶段,每一个Reducer处理该
区域内的非等值连接,并生成最终结果。该算法很好地解决了MapReduce在
处理非等值连接中的数据倾斜与计算平衡问题,但在数据混洗过程中需要很大
的数据传输量。
非等值连接算法
① 标记的二维矩阵
S={5,7,7,8,9,9}
T={5,7,7,7,8,9}
② 均衡Reducer的输入量及输
出量
相似度连接举例
For example,in master-data-management applications, a
system has to identify that names “John W. Smith”, “Smith,
John”, and“John William Smith” are potentially referring to the
same person.
As another example, when mining social networking sites
where users’ preferences are stored as bit vectors (where a “1”
bit means interest in a certain domain), applications want to use
the fact that a user with preference bit vector
“[1,0,0,1,1,0,1,0,0,1]” possibly has similar interests to a user
with preferences “[1,0,0,0,1,0,1,0,1,1]”.
相似度连接算法
算法简介
welcome
to use these PowerPoint templates, New
该算法首先利用两个MapReduce作业进行数据统计与全局词项
排序。接着利用一个MapReduce
作业,通过前缀过滤的方法减少
Content design, 10 years experience
需要参加相似连接运算的数据,并生成连接结果的键值对。最后通
过一个MapReduce作业,根据前一步生成的键值对生成最后的相似
性连接结果。该算法充分利用了相似性连接的特点,过滤掉不可能
成为最终结果的数据,提高了查询效率,但应用范围只限于文本字
符串的相似性连接。
相似度连接算法
① 数据统计与全局
词项排序
② b第二阶段用tear-down
function在内存中排序
相似度连接算法
① 前缀过滤
② A属于X组,B、G属于Y组,
C、D属于Z组
相似度连接算法
① 前缀过滤
③ 根据前一步
生成的键值
对生成最后
的相似性连
接结果
② A属于X组,B、G属于Y组,
把第一阶
C、D属于Z组
段产生的
结果广播
给每个
map
多表连接
在数据库应用领域中,经常需要对多个表进行连接操作,比较
有代表性的是星型连接与链式连接。
星型连接:在数据仓库应用中,星型模式是最常用
的数据表示模型,包括一个事实表和多个维表.
链式连接:
星型连接
事实表LINEORDER和4个维表CUSTOMER、SUPPLIER、PART和DATE.在基于星型模式
的OLAP查询中,涉及最多的操作就是维表和事实表的连接,又被称为星型连接.
星型连接返回连接的全部结果,是OLAP查询中代价最高的操作之一.
例1. SELECT*
FROM LineorderF,CustomerC,SupplierS,PartP,DateD
WHERE F.custkey = C.custkey and F.suppkey=S.suppkey and
F.partkey= P.partkey and F.orderdate = D.datekey
ORDER BY F.squantity+C.scredit+S.saddress+P.sbrand1+D.stime
STOP AFTER k;
多表等值连接算法
算法简介
该算法的基本思想是,对于每一个连接属性,都有一个对应的共
welcome to use these PowerPoint templates, New
享值表示这个属性进行 Hash 后的桶数,Map 输出的
Content design, 10 years experience
keyintermediate/valueintermediate对需要传到该表没有包含的属性对应的
每个Hash值中,因此复制的数量由该表没有包含的连接属性所对应
的共享值之积所决定。在Reduce阶段,每个Reducer将传到该节点
的各表的数据进行连接,形成最终结果。随着表数的增加,应用这
种算法产生的中间传输数据量将急剧增加,因此比较适合用于星型
连接与表数不太多的链式连接。
多表等值连接算法
•
Suppose that the target number of map-keys is k. That is, we shall use k
Reduce processes to join tuples from the three relations. Each of the three
attributes A, B, and C will have a share of the key, which we denote a, b,
and c, respectively.We assume there are hash functions that map values of
attribute A to a different buckets, values of B to b buckets,and values of C to
c buckets.
•
Consider tuples (x,y) in relation R. Which Reduce processes need to know
about this tuple? Recall that each Reduce process is associated with a
map-key (u, v,w), where u is a hash value in the range 1 to a, representing
a bucket into which A-values are hashed. Similarly, v is a bucket in the
range 1 to b representing a B-value, and w is a bucket in the range 1 to c
representing a C-value. Tuple ex; yT from Rcan only be useful to this
reducer if hexT ?u and heyT ?v. However, it could be useful to any reducer
that has these first two key components, regardless of the value of w. We
conclude that (x,y) must be replicated and sent to the c different reducers
corresponding to key values (h(x),h(y),w), where 1 <=w <=c.
多表链式连接算法
算法简介
针对多表的链式连接,结合了列存储的思想,提出了基于二部图
welcome to use these PowerPoint templates, New
的连接算法。设参加链式连接计算的表的个数为 n,该算法首先利
Content design, 10 years experience
用 n 个MapReduce作业为每个表建立一个二部图,接着执行 2(n-1)
个MapReduce作业,根据上一步骤生成的二部图以链式连接相反的
顺序减少每个表中参数连接计算的记录个数,最后利用浓密树来提
高连接的并行度,这至少需要再执行 n-1个作业进行连接。该算法
最大程度地减少了参与连接计算的数据传输量,但需要比较多的
MapReduce 作业数。
多表链式连接算法
多表非等值连接算法
算法简介
welcome to use these PowerPoint templates, New
该算法首先生成一个超立方体来表示多个表的笛卡儿积。接着利
Content design, 10 years experience
用希尔伯特填充曲线对超立方体进行填充,利用希尔伯特填充曲线
产生连接值,对待连接的数据进行分区,并且生成合适的R。在
Map任务中,对每个记录所满足非等值条件的分区都生成一个
keyintermediate/valueintermediate对。在Reduce阶段,完成连接运算并
产生最终结果。
希尔伯特曲线
希尔伯特曲线是一种能填充满一个平面正方形的分形曲线(空
间填充曲线),由大卫·希尔伯特在1891年提出。由于它能填满
平面,它的豪斯多夫维是2。取它填充的正方形的边长为1,第n
步的希尔伯特曲线的长度是2n - 2-n。
基于传统 MapReduce 的连接总结
总体来说,基于传统MapReduce框
架的连接算法比较简单,不需要对数据
进行组织。然而,该类算法可能需要多
个MapReduce作业,需要传输的中间
结果也较多,影响了连接操作的性能
连接技术简介
基于传统 MapReduce 的连接
基于数据索引的连接
基于改进 MapReduce 的连接
基于数据索引的连接
该类算法的思想是利用合适的索引对数据进行过滤,以优化查
询的性能。 Hadoop++和HadoopDB都可以利用索引提高连接操作
的性能。
Hadoop++主要利用寄宿索引技术来提高数据查询、连接的性能。寄宿索引将索引
加入到Block信息中,并添加了Footer部分用以分隔各个分片Hadoop++利用
MapReduce作业来完成索引的构建。在进行数据查询时,split函数从文件末尾根据
Footer信息解析出每个分片的位置,itemize函数根据数据查询的范围定位满足条件
的数据。在此基础上,Hadoop++还对数据连接、数据布局方面进行了优化。
HadoopDB 在Hadoop 和 Hive上进行了修改,完成了由SQL语句生成MapReduce
作业和作业中每个任务执行的SQL语句的过程。在查询时,HadoopDB将数据导入
到数据库中,利用数据库中的索引及查询优化机制提高查询性能。
基于数据索引的连接
CoHadoop通过改变Hadoop的副本放置策略来提高 MapReduce 框架处理数据连
接性能。CoHadoop 为每个文件增加 Locator 字段来标识其他存储位置,具有相同
Locator信息的文件将被尽量组织在相同的数据节点上。在Master节点上维护一个
Locator的Hash表,用来存储每个文件的存储位置,这样在进行两表连接运算时,
需要连接的两表数据在同一节点上的概率非常高,可以有效减少数据混洗的代价。
然而,CoHadoop需要预先得到需要连接运算的各个表大致的相关分布情况,不具
有普遍适应性。
Tenzing系统可以用来进行数据连接的优化。Tenzing 是一个异构的系统,其后台
融合了ColumnIO、BigTable、GFS、MySQL 数据库等系统。Tenzing 可以在这些
系统上进行 SQL 操作,并且可以对底层数据进行数据过滤和数据索引,以提高查
询效率。
多表连接系统Llama是基于垂直分组的。Llama导入数据表时会建立包含所有列
并按主键排序的基本垂直分组。在连接操作时,Llama根据需要建立包含部分列并
按某一列排序的辅助垂直分组,以及为每个外键建立包含该外键与主键并按外键排
序的PF垂直分组。Llama将多表连接查询分解为无数据耦合的多个子查询,在Map
阶段利用排序好的垂直分组进行子查询的连接操作,在Reduce阶段对子查询结果
进行合并完成连接操作。Llama利用类似于 Map-Join-Reduce框架的技术以减少
MapReduce 作业数。
连接技术简介
基于传统 MapReduce 的连接
基于数据索引的连接
基于改进 MapReduce 的连接
基于改进 MapReduce 的连接
使用传统MapReduce处理连接查询时,经常需要多个MapReduce
作业,并且需要产生大量的中间结果。另外,待连接的数据源往往是
异构的,在使用MapReduce 进行连接操作时,需要进行同构化的处
理。为了解决这些问题,一些学者对MapReduce框架进行了扩展,
具有代表性的有Map-Reduce-Merge、Map-Join-Reduce 与
ComMapReduce 框架。
Map-Reduce-Merge框架
简介
Map-Reduce-Merge框架是在MapReduce框架上增加Merge阶段。当两组
MapReduce任务完成时,协调者节点会利用一个merge
函数将两组 New
MapReduce
welcome to use these PowerPoint templates,
结果进行合并。利用Map-Reduce-Merge 这种新的编程框架,可以方便地实现关系
Content design, 10 years experience
数据库中的连接及笛卡儿积操作。对于map、reduce、merge 操作,用户都可以
实现自定义的逻辑,因此Map-Reduce-Merge框架比MapReduce框架更具表达力。
为了进一步提高Map-Reduce-Merge连接查询效率,可以使用MapReduce作业建
立索引的方法,可以有效地在Map-Reduce-Merge框架上进行数据剪枝。针对半连
接中对数据倾斜处理的不足,以及分布式处理方法中数据传输量较大等问题,在
Map-Reduce-Merge架构的基础上,进一步提出了半连接的处理方案,并通过使用
分布式直方图等技术来协助处理,从而降低了I/O消耗和网络传输负担,提高了框架
的可扩展性和可用性。
Map-Join-Merge框架
简介
welcome to use these PowerPoint templates, New
Map-Join-Reduce编程框架,对原有的MapReduce框
Content design, 10 years experience
架进行扩展,来提高处理连接的能力。join函数可以从多
个数据源读取数据来进行连接,连接函数的操作及连接顺
序都可以由用户指定。另外,在Map-Join-Reduce框架中,
一个map函数的输出可以传给多个join函数,这样就可以
利用一个MapReduce作业完成多表之间的连接操作。
ComMapReduce框架
简介
在使用MapReduce框架进行连接计算时,混洗中需要传输的数据很多,且部分
数据在Reduce阶段并没有被利用。
ComMapReduce框架是对这种情况的优化。
welcome to use these PowerPoint
templates, New
ComMapReduce在MapReduce框架上加入了一个协调者节点,负责接收、存储
Content design, 10 years experience
与更新少量的全局共享信息,将共享信息发送到各个Mapper 上。当每个 Map 任
务结束时,Map 任务与协调者进行通信,将本地的一些关键信息传输到协调者上,
协调者利用各个Map任务发送的信息,更新全局信息,并将结果发送至各个
Mapper上,接着每个Mapper 使用接收到的全局信息对该 Mapper 生成的结果进
行过滤。在进行连接运算时,ComMapReduce框架用Bloom Filter存储全局信息
来标识有哪些连接属性的值会参与最终结果的运算。当Mapper接收到
这个全局信息时,就可过滤不会参与最终结果运算的记录,减少混洗的代价。
基于改进 MapReduce 的连接总结
与传统MapReduce框架下的连接算法相比,
基于改进MapReduce的框架可以减少作业个数
及中间数据的传输量。然而,这些框架都是通过
增加数据处理函数或扩展传统框架的某一部分的
流程来实现的,这将比较简单的MapReduce框
架复杂化了,增加了使用框架的难度。
Thank you!