基于 hadoop 的字符串 join 问题

24
唐唐唐 2012唐7唐26唐 唐唐 HADOOP 唐唐唐唐 JOIN 唐唐

Upload: kami

Post on 05-Jan-2016

295 views

Category:

Documents


0 download

DESCRIPTION

基于 Hadoop 的字符串 Join 问题. 唐振坤 2012 年 7 月 26 日. Outline. 1 、问题定义 2 、相关背景 3 、 想法 & 工作 4 、 实验 5 、 结论 6 、 后续思路. 1. 问题定义. 给定一组字符串,要判断出哪些字符串是相似的? 应用: Web 搜索引擎爬取网页时的重复网页检测 去除重复数据后的文档聚类 文档抄袭、剽窃检测 基于查询相似性的用户推荐 DNA 序列分析 ……. 1. 问题定义. 相似性 ( String metric) : 给定字符串 r 和 s, Sim 度量: - PowerPoint PPT Presentation

TRANSCRIPT

唐振坤2 0 1 2 年 7 月 2 6 日

基于 HADOOP的字符串JOIN问题

2

OUTLINE

• 1、问题定义• 2、相关背景• 3、想法 &工作• 4、实验• 5、结论• 6、后续思路

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

6

2.相关背景

• 相关算法:• All-Pairs• PPJoin、 PPJoin+、 Ed-Join• Pass-Join• PPJoin based on MapReduce

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

小数据表已经读入内存

12

3.想法

• 三步连接:• 划分片段并生成反向索引列表• 子串选择并生成候选对• 候选对验证

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

16

3.想法

• 问题:• 阶段太多,生成反向索引与子串选择阶段独立,可合并• 候选对生成过大,连接时读入不可行

17

3.想法

• 划分片段与子串选择• 字符串连接验证

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

21

4.实验

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等

24

谢谢!