数据库大作业报告PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5
普通连接(normal join)
Map端唯一的工作是给数据打标记 Reduce端进行join操作(又称为reduce端的连接) 缺点:网络传输量大,没有任何优化,效率低下 优点:可以认为没有内存限制(如果这种join方法因为内存不足而无法执 行,那么其他join方法自然也不行)
6
复制连接(copy join)
9
10
代价模型
在hadoop任务串行化执行的假设下,任意时刻最多有一个join任务在执行, 可以认为这个join任务独占了系统资源。因此在硬件资源许可的情况下应 该尽量选择效率高的join方法 • 复制连接要求小表要能放进内存buffer • 半连接要求bloom filter要能放进内存buffer(通常情况下都能满足) • 基本连接对内存大小没有要求 效率:复制连接>半连接>基本连接 下面对3种join方法的代价进行简单分析,假设R表和S表做连接得到T表
8
数据采样
在连接前先对数据随机采样,获取统计信息,使代价模型能够更加精确 地估计出连接代价 数据采样百分比可以在配置文件中按需设定 采样信息包括:
Size numBlock numTuple sizeBlock sizeTuple distinctKeyLeft distinctKeyRight
表的大小(byte) 表包含的block数 表包含的tuple数 一个block的大小(byte) 一个tuple的大小(byte) 最左列的distinct value数 最右列的distinct value数
mapper reducer
model (代价模型)
CostModel
JoinDriver NormalJoin CopyJoin SemiJoin MultiJoin
NormalMapper CopyMapper BFMapper SemiMapper
NormalReducer CopyReducer BFReducer
• 假设hadoop的任务执行都是串行的,不存在并行调度或是流水线并发 调度的情况
• 在单机伪分布式环境中的hadoop任务执行流程符合上述假设 • 该假设主要是为了简化hadoop任务的代价分析
4
Join方法
共实现了以下3种join方法: • 基本连接(normal join) • 复制连接(copy join) • 半连接(semi join) 下面首先对三种方法做简要介绍
16
具体实现
这里不对代码细节做分析,仅展示基本的包结构
data (数据结构)
Conf Method Node Record Table
driver (启动入口)
utils (测试工具)
engine (优化引擎)
Test
NaiveEngine GreedyEngine DPEngine OptimalEngine
借用半连接的思想实现等值连接 使用hadoop的distributedcache,在连接开始之前将小表的key发送给每个 mapper(实际中压缩为bloom filter) Map端利用bloom filter过滤掉不可能出现在结果中的数据,极大减少了网 络传输量 Reduce端执行join操作并去重 缺点:预处理过程多,启动延迟大 优点:利用bloom filter过滤数据,极大减少了网络传输量,效率较高
使用hadoop的distributedcache,在连接开始之前将较小的表发送至每一 个map端 Map端可以完成join过程(又称为map端连接) Reduce端的唯一工作是去重 缺点:内存限制高,要求小表能放进内存buffer 优点:map端连接,极大减少网络传输量,效率最高
7
半连接(semi join)
2014/01/22
数据库大作业报告
李舜阳 1301214306 谌国风 1301214235
工作简介
• 3种join(等值连接)实现方式 • 动态数据采样+代价估计多表连接优化 • 3种执行树生成引擎 • 支持日志文件 • 支持配置文件 • 支持结果去重(自然连接)和不去重(笛卡尔Leabharlann Baidu连接) • 自动生成测试文件 • 2000+行代码
2
假设和前提I
假设在连接时参与连接的列只可能是表的最左列或最右列。例如:
R
S
T
假设R、S、T三个表做连接,参与连接的列只可能是带颜色的那些列 在这个假设下,多表连接时不需要关注除了表两侧的那些列,不需要对 连接查询语句进行语义分析 在这个假设下,多表连接的顺序不能随意调换,简化了连接优化过程
3
假设和前提II
benchmark。空间复杂度为O(1) 2. Greedy,类似huffman编码的思想,每次挑选代价最小的表做join。空
间复杂度为O(n) 3. DP,用动态规划方法找出最优的调度方案。空间复杂度为O(n^3)
15
多表连接执行流程
1. 采样数据 2. 选择join方法,估计代价 3. 使用贪心法或动态规划方法生成执行树 4. 执行mapreduce任务
17
测试和分析
在测试和分析之前,首先对测试数据进行一些简要说明 为了方便讨论,这里先给出有关测试数据的3个概念: 1. 重合度(coincide) 2. 核心长度(core size) 3. 重复度(duplicate)
18
重合度(coincide)
R
S
19
核心长度(core size)
R
20
重复度(duplicate)
R
21
产生测试数据恰好是join的逆过程,首先产生join结果,然后将其拆分 可以看出,这种方法产生的表的核心长度(core size)都相同
1. 产生join的结果表, 即核心长度(core size)
11
普通连接的代价估计
12
复制连接的代价估计
假设有n个mapper,且S表很小
13
半连接的代价估计
Semijoin分为2个mapreduce任务 假设由S表产生bloom filter,且忽略bloom filter的代价
14
代价模型
当任意join任务的join方法被确定后,可以使用搜索、贪心、动态规划等 技术确定多表连接的调度方案 我们实现了3种调度引擎: 1. Naïve,从左到右顺序连接,即没有任何优化的调度方案,可作为
普通连接(normal join)
Map端唯一的工作是给数据打标记 Reduce端进行join操作(又称为reduce端的连接) 缺点:网络传输量大,没有任何优化,效率低下 优点:可以认为没有内存限制(如果这种join方法因为内存不足而无法执 行,那么其他join方法自然也不行)
6
复制连接(copy join)
9
10
代价模型
在hadoop任务串行化执行的假设下,任意时刻最多有一个join任务在执行, 可以认为这个join任务独占了系统资源。因此在硬件资源许可的情况下应 该尽量选择效率高的join方法 • 复制连接要求小表要能放进内存buffer • 半连接要求bloom filter要能放进内存buffer(通常情况下都能满足) • 基本连接对内存大小没有要求 效率:复制连接>半连接>基本连接 下面对3种join方法的代价进行简单分析,假设R表和S表做连接得到T表
8
数据采样
在连接前先对数据随机采样,获取统计信息,使代价模型能够更加精确 地估计出连接代价 数据采样百分比可以在配置文件中按需设定 采样信息包括:
Size numBlock numTuple sizeBlock sizeTuple distinctKeyLeft distinctKeyRight
表的大小(byte) 表包含的block数 表包含的tuple数 一个block的大小(byte) 一个tuple的大小(byte) 最左列的distinct value数 最右列的distinct value数
mapper reducer
model (代价模型)
CostModel
JoinDriver NormalJoin CopyJoin SemiJoin MultiJoin
NormalMapper CopyMapper BFMapper SemiMapper
NormalReducer CopyReducer BFReducer
• 假设hadoop的任务执行都是串行的,不存在并行调度或是流水线并发 调度的情况
• 在单机伪分布式环境中的hadoop任务执行流程符合上述假设 • 该假设主要是为了简化hadoop任务的代价分析
4
Join方法
共实现了以下3种join方法: • 基本连接(normal join) • 复制连接(copy join) • 半连接(semi join) 下面首先对三种方法做简要介绍
16
具体实现
这里不对代码细节做分析,仅展示基本的包结构
data (数据结构)
Conf Method Node Record Table
driver (启动入口)
utils (测试工具)
engine (优化引擎)
Test
NaiveEngine GreedyEngine DPEngine OptimalEngine
借用半连接的思想实现等值连接 使用hadoop的distributedcache,在连接开始之前将小表的key发送给每个 mapper(实际中压缩为bloom filter) Map端利用bloom filter过滤掉不可能出现在结果中的数据,极大减少了网 络传输量 Reduce端执行join操作并去重 缺点:预处理过程多,启动延迟大 优点:利用bloom filter过滤数据,极大减少了网络传输量,效率较高
使用hadoop的distributedcache,在连接开始之前将较小的表发送至每一 个map端 Map端可以完成join过程(又称为map端连接) Reduce端的唯一工作是去重 缺点:内存限制高,要求小表能放进内存buffer 优点:map端连接,极大减少网络传输量,效率最高
7
半连接(semi join)
2014/01/22
数据库大作业报告
李舜阳 1301214306 谌国风 1301214235
工作简介
• 3种join(等值连接)实现方式 • 动态数据采样+代价估计多表连接优化 • 3种执行树生成引擎 • 支持日志文件 • 支持配置文件 • 支持结果去重(自然连接)和不去重(笛卡尔Leabharlann Baidu连接) • 自动生成测试文件 • 2000+行代码
2
假设和前提I
假设在连接时参与连接的列只可能是表的最左列或最右列。例如:
R
S
T
假设R、S、T三个表做连接,参与连接的列只可能是带颜色的那些列 在这个假设下,多表连接时不需要关注除了表两侧的那些列,不需要对 连接查询语句进行语义分析 在这个假设下,多表连接的顺序不能随意调换,简化了连接优化过程
3
假设和前提II
benchmark。空间复杂度为O(1) 2. Greedy,类似huffman编码的思想,每次挑选代价最小的表做join。空
间复杂度为O(n) 3. DP,用动态规划方法找出最优的调度方案。空间复杂度为O(n^3)
15
多表连接执行流程
1. 采样数据 2. 选择join方法,估计代价 3. 使用贪心法或动态规划方法生成执行树 4. 执行mapreduce任务
17
测试和分析
在测试和分析之前,首先对测试数据进行一些简要说明 为了方便讨论,这里先给出有关测试数据的3个概念: 1. 重合度(coincide) 2. 核心长度(core size) 3. 重复度(duplicate)
18
重合度(coincide)
R
S
19
核心长度(core size)
R
20
重复度(duplicate)
R
21
产生测试数据恰好是join的逆过程,首先产生join结果,然后将其拆分 可以看出,这种方法产生的表的核心长度(core size)都相同
1. 产生join的结果表, 即核心长度(core size)
11
普通连接的代价估计
12
复制连接的代价估计
假设有n个mapper,且S表很小
13
半连接的代价估计
Semijoin分为2个mapreduce任务 假设由S表产生bloom filter,且忽略bloom filter的代价
14
代价模型
当任意join任务的join方法被确定后,可以使用搜索、贪心、动态规划等 技术确定多表连接的调度方案 我们实现了3种调度引擎: 1. Naïve,从左到右顺序连接,即没有任何优化的调度方案,可作为