BMJoin: 一种基于HIVE系统的高效交叉证认方法(唐帝鑫,中科院计算所)

Download Report

Transcript BMJoin: 一种基于HIVE系统的高效交叉证认方法(唐帝鑫,中科院计算所)

BMJoin: 一种基于HIVE系统的高效交叉证认方法
唐帝鑫
中科院计算所,分布式与云计算小组
2012年11月30号
概要
I.
II.
III.
IV.
V.
VI.
天文学中的交叉证认
Hadoop及HIVE简介
现有基于HIVE系统的JOIN方法
BMJOIN:基于HIVE系统的JOIN方法
测试结果
总结
天文学中的交叉证认
• 交叉证认
• 按照位置属性,将不同星表中的天体记录联系起来,在相同位置的或在
一定位置误差范围内的天体,被证认为是同一天体.
• 基于HTM索引的天区划分
• 天球被划分成多个大小相等的分区, 每个分区被赋于一个编号,即
HTMID; 在交叉证认时, 在星表的HTMID上做连接, 并计算在同一分
区内两两星球间的距离,输出两个星表上被认为是同一星球的记录.
天文学中的交叉证认
• 交叉证认示例
• 假设有两个星表L和R,如下表所示
• 对表L和表R进行交叉证认的SQL语句为
天文学中的交叉证认
• 问题的提出
•
针对于天文学中的交叉证认操作, 我们将其抽象为两个大表的Join操作(也就
是两个大表的连接操作)
• 可行方案选择
•
传统数据库? 传统数据库经过多年的发展已日趋成熟, 但是由于物理世界数据
量呈爆炸性增长(比如天文巡天数据), 传统数据库由于其扩展性的限制, 它已
无法应对如此大量的数据.
•
并行数据库? 高效的并行数据库多半是商用数据库, 运行在中, 高端的服务器
上, 构建成本太高, 代价过大.
•
针对以上的限制以及交叉证认的问题, 我们采用Hadoop和HIVE作为本问题
的解决方案. Hadoop与HIVE是免费, 开源的系统, 运行在低端服务器上, 成本
较低. Hadoop具有很好的可扩展性. 而基于Hadoop之上的HIVE系统则提供
了一种类SQL接口, 方便用户操作.
概要
I.
II.
III.
IV.
V.
VI.
天文学中的交叉证认
Hadoop及HIVE简介
现有基于HIVE系统的JOIN方法
BMJOIN:基于HIVE系统的JOIN方法
测试结果
总结
大规模数据处理平台Hadoop
• Hadoop是一个致力于处理大规模数据的分布式计算平台. 运行在低
端的服务器上,Hadoop可以实现高吞吐率, 高可靠性和高扩展性.
• Hadoop由MapReduce计算框架和分布式文件系统构成; 其中, 分布
式文件系统默认使用Hadoop自带的分布式文件系统HDFS.
MapReduce
Write
Read
HDFS
大规模数据处理平台Hadoop
• MapReduce概览
Mappers
Partition:
hash(k2)%reducenum
Reducers
DFS
split
DFS
split
split
Map input(k1, v1)
Map output
list(k2, v2)
Reduce input
(k2,list(v2))
Reduce output
list(v3)
基于Hadoop的数据仓库HIVE
• HIVE概览
• HIVE是基于Hadoop之上的一个数据仓库. 它向上提供一种类SQL的
接口(HQL), 降低了系统使用和管理的门槛, 使得用户不用了解
Hadoop系统细节就能方便地使用.
• HIVE将接收到的HQL语句转化为MapReduce作业, 运行于HDFS上.
它继承了Hadoop的高吞吐率,高可用性,高扩展性等优势.
HQL
HIVE
提交MapReduce作业
获取MapReduce结果
Hadoop
概要
I.
II.
III.
IV.
V.
VI.
天文学中的交叉证认
Hadoop及HIVE简介
现有基于HIVE系统的JOIN方法
BMJOIN:基于HIVE系统的JOIN方法
测试结果
总结
现有基于HIVE系统的JOIN方法
• Map Join
对于两个表的Join, 当其中一个表较小时(能装入单机内存), Map Join
性能很好; 但是, 对于两个大表的Join操作却不适合.
• Map Bucket Join
Map Bucket Join是针对于Map Join的优化, 放松了Join时对表大小
的限制, 但是当两个表变得很大时,性能会变得很差.
• Common Join
Common Join对表的大小没有一定的限制, 是一种常用的Join方法
现有基于HIVE系统的JOIN方法
“L”Value
• Common Join 例子
L
1
Value
1
Value
2
value
Map
1 “L”
/1”R”
1 “L”
“L”Value
1 “L”
“L”Value
2 “L”
“L”Value
R
Value
2
value
Map
1 “R”
“R”Value
Reduce
2 “L”
/“R”
1
“L”Value
“L”Value
“R”Value
“R”Value
Reduce
2 “R”
“R”Value
现有基于HIVE系统的JOIN方法
• Common Join 在星表中应用
Catalog
Segment
Map Stage
Zone
Segment
Shuffle Stage
Zone
Table
Reduce Stage
Split
Hash
Zone Table Table
M
L
...
...
REDUCE
M
...
R
...
...
...
...
Hash
Table
M
...
HDFS
HDFS
REDUCE
Result
概要
I.
II.
III.
IV.
V.
VI.
天文学中的交叉证认
Hadoop及HIVE简介
现有基于HIVE系统的JOIN方法
BMJOIN:基于HIVE系统的JOIN方法
测试结果
总结
BMJOIN:基于HIVE系统的JOIN方法
• HIVE系统中的Bucket(桶)机制
• HIVE提供一种将数据表在指定列上按行分块的机制,称为Bucket机制,
而每一个分块称为一个Bucket.
• Bucket机制示例
• 下图表示在星表L上按ZoneID建Bucket, 共建N个Bucket
ZoneID: 1, N+1 …
id
ZoneID
RA
DEC
…
1
2
1.119851
1.119851
…
2
5
…
…
…
…
…
…
…
…
ZoneID%N
ZoneID: 2, N+2 …
ZoneID: 3, N+3 …
BMJOIN:基于HIVE系统的JOIN方法
• BMJoin 概览
•
对两个星表L和R, 分别在连接键(在此应用中是ZoneID)上建N和M个Bucket,
其中N和M满足 N mod M=0 或者 M mod N = 0. 然后起Map-Reduce作
业, 使用BMJoin进行连接. 由于在星表交叉证认中, 两个星表数量级相当, 所以
在测试时,使表L和R的Bucket的个数相同.
• BMJoin 详解
•
•
1. 初始化: 每个map的初始化阶段会从分布式文件系统(HDFS)上读取L表的一
个Bucket的数据, 建成Hash表.
2. 连接操作: map从HDFS上读取R表中与L表对应的Bucket, 每次读取一个记
录, 在已建成的Hash表中连接, 过滤, 如下图所示
BMJOIN:基于HIVE系统的JOIN方法
• BMJoin 详解
•
由于相同ZoneID的记录被放入两个具有相同编号的Bucket中, 我们可以起一
个只有Map阶段的MapReduce作业完成连接操作. 这种方法相对Common
Join而言去除了Reduce阶段, 提高了Join的性能
概要
I.
II.
III.
IV.
V.
VI.
天文学中的交叉证认
Hadoop及HIVE简介
现有基于HIVE系统的JOIN方法
BMJOIN:基于HIVE系统的JOIN方法
测试结果
总结
测试结果
• 测试环境配置, 负载及测试用例
• 每个节点配置4核CPU, 8G内存, 安装CentOS 5.3操作系统
• 测试负载采用两个巡天项目的真实数据,分别来自美国海军天文台的观
测数据USNO-A和二微米全天巡天项目2MASS
记录数
数据量
Usnoa
526,280,881
48GB
2Mass
470,992,970
42GB
• 测试用例如下图所示
测试结果
• Bucket个数对性能的影响
• 我们使用1个主节点,8个工作节点作为测试环境,随机选取2Mass中
14GB, USNOA中16GB作为测试负载,改变Bucket个数来比较
Common Join和BMJoin的运行时间.
运行时间(s)
600
550
500
450
Common Join
400
BMJoin
350
300
250
200
100 200 300 400 500 600 700 800 900 1000
Bucket个数
测试结果
• 数据量大小对性能的影响
• 我们使用1个主节点, 8个工作节点作为测试环境; 将Bucket数量设为
300, 总数据量大小从10GB增加到90GB以比较Common Join和
BMJoin的运行时间.
运行时间(s)
2000
1800
1600
1400
1200
Common Join
1000
BMJoin
800
600
400
200
数据量大小(GB)
0
10
20
30
40
50
60
70
80
90
测试结果
• 节点数变化对性能的影响
• 我们假设每个节点处理9GB数据, 增加节点个数(数据量也相应地增大
),以比较Common Join和BMJoin的运行时间
运行时间(s)
1400
1300
1200
1100
1000
Common Join
900
BMJoin
800
700
600
500
400
3
4
5
6
7
8
9
节点个数
概要
I.
II.
III.
IV.
V.
VI.
天文学中的交叉证认
Hadoop及HIVE简介
现有基于HIVE系统的JOIN方法
BMJOIN:基于HIVE系统的JOIN方法
测试结果
总结
总结
• 我们将天文学中的交叉证认问题抽象成两个大表的Join(连
接)操作.
• 我们采用HIVE系统来处两个大表的Join操作. HIVE系统继
承了Hadoop高吞吐率,高可用性,高扩展性等优势, 同时也
提供了一种类SQL(HQL)的接口, 有利于用户操作.
• 我们针对现有HIVE中Join方法存在的问题以及大表Join的
需求提出了BMJoin方法. 经过实验证明, 相对于原有的
Common Join, BMJoin能提高35%-50%的性能.
谢谢!
Q&A