基于Hadoop的字符串Join问题研究

Download Report

Transcript 基于Hadoop的字符串Join问题研究

基于HADOOP的字符串
JOIN问题
唐振坤
2012年7月26日
OUTLINE
•
•
•
•
•
•
1、问题定义
2、相关背景
3、想法&工作
4、实验
5、结论
6、后续思路
2
1.问题定义
• 给定一组字符串,要判断出哪些字符串是相似的?
• 应用:
•
•
•
•
•
•
Web搜索引擎爬取网页时的重复网页检测
去除重复数据后的文档聚类
文档抄袭、剽窃检测
基于查询相似性的用户推荐
DNA序列分析
……
3
1.问题定义
• 相似性(String metric):
• 给定字符串r和s, 𝑠𝑖𝑚 𝑟, 𝑠 ≧ 𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑.
• Sim度量:
• Jaccard Similiarity: O(n)
• Edit Distance(Levenshtein Distance): 动态规划方法O(n^2)
• …
4
1.问题定义
• 字符串相似性Join:
• 给定一组基于字符串为特征的数据集,找出其中相似的字符串,并
Join相似的记录。
• 类型:
• 按操作不同:Self-Join、R-S Join
• 按应用不同:Jaccard Constraints、Ed Constraints
5
2.相关背景
• 相关算法:
•
•
•
•
All-Pairs
PPJoin、PPJoin+、Ed-Join
Pass-Join
PPJoin based on MapReduce
6
2.相关背景
• Pass-Join: Partition-based method[1]:
字符串
Partition
候选相似对
字符串
Verify
SubstringSelection
[1] Li, G. and Deng, D. and Wang, J. and Feng, J. (2011). Pass-Join : A Partition-based Method for
Similarity Joins. Proceedings of the VLDB Endowment, 5(3), 253--264.
7
2.相关背景
• Pass-Join: Partition-based method
• 求ed(R=“abcde”,S=“bcfde”)?≦\tau,\tau=2
划分阶段:
子串选择阶段:
b c f d e √
b c f d e
√
╳
b c f d e
产生候选对(两对):
a[bc]de
[bc]fde
abc[de]
bcf[de]
b c f d e
b c f d e
8
2.相关背景
• 基于Hadoop的Join操作[1]:
• Reduce-Side Join
• Map-Side Join
• Memory-Backed Join
Key
s1
K1
Abc
K2
bcd
Join
Key
s2
Key
s1
s2
K1
123
K1
Abc
123
K1
789
K1
Abc
789
K2
456
K2
bcd
456
=
[1] Lin, J., & Dyer, C. (2010). Data-intensive text processing with MapReduce. Synthesis Lectures on Human
Language Technologies (Vol. 3, pp. 1-177). Morgan & Claypool Publishers.
9
2.相关背景
• Reduce-Side Join
Mapper
表1:
K1, Abc
K2, bcd
表2:
K1, 123
K1, 789
K2, 456
Grouper
K1, Abc@
K2, bcd@
K1, 123#
K1, 789#
K2, 456#
Reducer
K1, (Abc@,123#,789#)
K2, (bcd@,456#)
K1,Abc,123
K1,Abc,789
K2,bcd,456
[Key,Value]
10
2.相关背景
• Memory-Backed Join
• 在Mapper处理前将小的数据表完全读入内存
表1:
K1, Abc
K2, bcd
读入内存放入Map中
K1 -> Abc
K2 -> bcd
Mapper
表2:
K1, 123
K1, 789
K2, 456
小数据表已经读入内存
K1,Abc,123
K1,Abc,789
K2,bcd,456
11
3.想法
• 三步连接:
• 划分片段并生成反向索引列表
• 子串选择并生成候选对
• 候选对验证
12
3.想法
• 生成反向索引列表
τ =2
R1
R2
Mapper
abcde
bcfde
Grouper
L5,I1,a
R1
L5,I2,bc
R1
L5,I3,de
R1
L5,I1,b
R2
L5,I2,cf
R2
L5,I3,de
R2
Reducer
L5,I1,a
R1
L5,I1,a
R1
L5,I2,bc
R1
L5,I2,bc
R1
L5,I3,de
R1,R2
L5,I3,de
R1,R2
L5,I1,b
R2
L5,I1,b
R2
L5,I2,cf
R2
L5,I2,cf
R2
L,i,segment(长度,片段编号,片段字符串)
13
3.想法
• 子串选择并生成候选对
Mapper
R2
Grouper
...
...
R1,R2
L5,I2,bc,0
R1,R2
L5,I3,de,3
...
...
bcfde
Reducer
...
R1,R2
...
...
[L5,I3,de,3],[L5,I3,de,3]
...
...
...
R1,R2
L5,I2,bc,0
R1,R2
L5,I3,de,3
...
...
L,i,substr,start(长度,片段编号,子串,起始位置)
14
3.想法
• 连接字符串并验证(Reduce-Side Join)
Mapper
Grouper
R1
abcde
R1
abcde,R
R2
bcfde
R2
bcfde,R
Reducer
R1
[abcde,R],
[(R1,R2)(L5,I2,bc,0),P],
[(R1,R2)(L5,I3,de,3),P]
R1,R2
R,(L5,I2,bc,0),abcde
R1,R2
R,L5,I3,de,3,abcde
[bcfde,R],
[(R1,R2)(L5,I2,bc,0),P],
[(R1,R2)(L5,I3,de,3),P]
R1,R2
S,(L5,I2,bc,0),bcfde
R1,R2
S,L5,I3,de,3,bcfde
R1 (R1,R2)(L5,I2,bc,0),P
R1,R2
L5,I2,bc,0
R2 (R1,R2)(L5,I2,bc,0),P
R2
R1 (R1,R2)(L5,I3,de,3),P
R1,R2
L5,I3,de,3
R2 (R1,R2)(L5,I3,de,3),P
R表示记录信息,P表示候选对信息
Mapper
R表示候选对前项记录,S表示后项记录
Grouper
R1,R2
R,(L5,I2,bc,0),abcde
R1,R2
R,(L5,I2,bc,0),abcde
R1,R2
R,L5,I3,de,3,abcde
R1,R2
R,L5,I3,de,3,abcde
Reducer
R1,R2
R1,R2
S,(L5,I2,bc,0),bcfde
R1,R2
S,(L5,I2,bc,0),bcfde
R1,R2
S,L5,I3,de,3,bcfde
R1,R2
S,L5,I3,de,3,bcfde
[R,(L5,I2,bc,0),abcde],
[R,L5,I3,de,3,abcde],
[S,(L5,I2,bc,0),bcfde],
[S,L5,I3,de,3,bcfde]
R1,R2
abcde,bcfde,2
15
3.想法
• 问题:
• 阶段太多,生成反向索引与子串选择阶段独立,可合并
• 候选对生成过大,连接时读入不可行
16
3.想法
• 划分片段与子串选择
• 字符串连接验证
17
3.想法
• 划分片段与子串选择
Mapper
Grouper
L5,I1,a,P
Reducer
R1
L5,I2,bc,P R1
L5,I3,de,P R1
R1
abcde
R2
bcfde
...,S
L5,I1,b,P
R1,?
R2
L5,I2,cf,P R2
...
...
...
...
L5,I2,bc,P/S
R1,[R2,0]
R1,R2
L5,I2,bc,0
L5,I3,de,P/S
R1,[R2,3]
R1,R2
L5,I3,de,3
...
...
...
...
L5,I3,de,P R2
L5,I3,de,S
R2,0
L5,I3,de,S
R2,3
...,S
R2,?
数字表示子串起始位置
P表示划分,S表示子串
18
3.想法
• 字符串连接验证(Memory-Backed Join)
Mapper
...
...
R1,R2
L5,I2,bc,0
R1,R2
L5,I3,de,3
...
...
Reducer
Grouper
R1,R2
(L5,I2,bc,0),abcde,bcfde
R1,R2
R1,R2
(L5,I2,bc,0),abcde,bcfde
(L5,I3,de,3),abcde,bcfde
R1,R2
abcde,bcfde,2
(L5,I3,de,3),abcde,bcfde
map预先读入
R1
abcde
R2
bcfde
19
3.想法
• 在Map端划分片段与子串选择
• 在Reduce端连接并验证
Mapper
Grouper
L5,I1,a,P
Reducer
R1
L5,I2,bc,P R1
L5,I3,de,P R1
R1
abcde
R2
bcfde
...,S
R1,?
...
...
L5,I2,bc,P/S
R1,[R2,0]
L5,I3,de,P/S
R1,[R2,3]
...
...
R1,R2
L5,I1,a,P
R1
L5,I2,bc,P R1
abcde,bcfde,2
L5,I3,de,P R1
L5,I3,de,S
R2,0
L5,I3,de,S
R2,3
...,S
R2,?
加载原始数据集进行连接
数字表示子串起始位置
P表示划分,S表示子串
R1
abcde
R2
bcfde
20
4.实验
21
5.结论
• 1、MapReduce适合于批量处理,不适合多遍迭代的复
杂算法
• 2、产生中间输出影响MapReduce性能
• 3、多利用Hadoop内置的Combiner及排序优化算法性
能
• 4、MapReduce处理分区不合理会遭遇数据倾斜问题
22
6.后续思路
• 1、先用前缀过滤将所有字符串分组,在每台机器上再调
用串行PassJoin算法
• 2、深入Mapreduce Join算法,再仔细地看下map-side
join的效率及实现如何
• 3、考虑如何均匀分配发送至Reducer上的候选对,使得
运行时间平均下来
• 4、考虑更多优化因素,如LSH,或使用其它编程模型,如
MPI等
23
24