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