takemikamiʼs note ‒ http://takemikami.com/
MapReduceによる
Connected Components(連結成分)の⾒つけ⽅
Copyright (C) Takeshi Mikami. All rights reserved. 1
三上 威 - @takemikami
アーリース情報技術株式会社 代表取締役 社⻑
2020.5.28
takemikamiʼs note ‒ http://takemikami.com/
はじめに
•テーマ
• MapReduceによる
Connected Components(連結成分)の⾒つけ⽅
•内容
• Connected Componentsとは何か
• Connected Componentsのアルゴリズム
• 性能改善のために
Copyright (C) Takeshi Mikami. All rights reserved. 2
この資料で説明する内容について⽰します
takemikamiʼs note ‒ http://takemikami.com/
Connected Componentsとは何か
Copyright (C) Takeshi Mikami. All rights reserved. 3
takemikamiʼs note ‒ http://takemikami.com/
Connected Components(連結成分)とは
• Connected Componentとは、
• 右のグラフで考えると、
3つのConnected Componentsがある
• a, b, d, e
• c, f, g, h, j
• i, k, l, m
Copyright (C) Takeshi Mikami. All rights reserved. 4
Connected Componentsとは何かを説明します
a b
d e
g h
f
c
j
k l
i
m
互いに接続される辺を持たない部分グラフ
(辺による接続で到達可能な頂点の集合)
Connected ComponentsConnected ComponentsConnected Components
takemikamiʼs note ‒ http://takemikami.com/
DataFrameでのグラフの表現⽅法 1/2
Copyright (C) Takeshi Mikami. All rights reserved. 5
DataFrameによるグラフの表現⽅法を⽰します
a b
d e
g h
f
c
j
k l
i
m
頂点1 頂点2
a b
a d
b e
c f
d e
f h
: :
頂点
a
b
c
d
e
f
:
• DataFrameでは
無向グラフを「頂点の集合」「辺の集合」で表現
頂点の集合 辺の集合
takemikamiʼs note ‒ http://takemikami.com/
DataFrameでのグラフの表現⽅法 2/2
• DataFrameでは
Connected Componentsを「頂点とConnected Componentの組」で表現
Copyright (C) Takeshi Mikami. All rights reserved. 6
DataFrameによるグラフの表現⽅法を⽰します
Connected Components
頂点 Connected
Component
a 1
b 1
c 2
d 1
e 1
: :
a b
d e
g h
f
c
j
k l
i
m
→以降のスライドで
「頂点・辺の集合」から「頂点とConnected Componentの組」の求め⽅を説明
Connected Component 1
Connected Component 2
Connected Component 3
takemikamiʼs note ‒ http://takemikami.com/
Connected Componentsのアルゴリズム
Copyright (C) Takeshi Mikami. All rights reserved. 7
takemikamiʼs note ‒ http://takemikami.com/
アルゴリズムの基本的な考え⽅ 1/2
Copyright (C) Takeshi Mikami. All rights reserved. 8
アルゴリズムの基本的な考え⽅を⽰します
1
8
5
7
9
1
8
5
7
9
変換3 3
• Connected Componentsは以下の考え⽅で求める
Component内で最も⼩さなIDの頂点が、
他の頂点と接続されるグラフに変換
最⼩IDの頂点
takemikamiʼs note ‒ http://takemikami.com/
アルゴリズムの基本的な考え⽅ 2/2
• 変換は、small/large-star操作が収束するまで繰り返すことで⾏う
Copyright (C) Takeshi Mikami. All rights reserved. 9
アルゴリズムの基本的な考え⽅を⽰します
small-star操作: ある頂点に注⽬し、その頂点より⼤きいIDを持つ頂点との接続を、最⼩のIDの頂点につなぎ替える
large-star操作: ある頂点に注⽬し、その頂点以下のIDを持つ頂点との接続を、最⼩のIDの頂点につなぎ替える
1
8
5
7
9
1
8
5
7
9
1
8
5
7
9
頂点⑧に注⽬したsmall/large-star操作
large-starsmall-star
takemikamiʼs note ‒ http://takemikami.com/
MapReduceによるsmall-star操作
Copyright (C) Takeshi Mikami. All rights reserved. 10
MapReduceによるsmall-star操作の流れを⽰します
頂点⑧に注⽬したsmall-star操作
Map ⟨u; v⟩:
if lv ≤ lu then
Emit ⟨u; v⟩.
else
Emit ⟨v; u⟩.
end if
Reduce ⟨u; N ⊆ Γ(u)⟩:
Let m = argmin v∈N∪{u} lv.
Emit ⟨v; m⟩ for all v ∈ N.
Reduce
u-v
8-1,5,7 → m=1 → 8-1, 1-1, 5-1, 7-1
9-8 → m=8 → 9-8
Map
u-v
1-8 → 8-1
5-8 → 8-5
7-8 → 8-7
8-9 → 9-8
1
8
5
7
9
• small-star操作の流れ
1
8
5
7
9
■⼊⼒・出⼒
辺の集合 (接続する頂点の組の集合)
■処理
1. Mapフェーズ
key=⼤きなID value=⼩さなID としてMap
2. keyでグルーピング
3. Reduceフェーズ
全てのID → グループ内の最⼩IDの組を出⼒
takemikamiʼs note ‒ http://takemikami.com/
MapReduceによるlarge-star操作
Copyright (C) Takeshi Mikami. All rights reserved. 11
MapReduceによるlarge-star操作の流れを⽰します
頂点⑧に注⽬したlarge-star操作
1
8
5
7
9
1
8
5
7
9
Map
u-v
1-8 → 1-8, 8-1
5-8 → 5-8, 8-5
7-8 → 7-8, 8-7
8-9 → 8-9, 9-8
Reduce
u-v
1-8 → m=1 → 8-1
5-8 → m=5 → 8-5
7-8 → m=7 → 8-7
8-1,5,7,8,9 → m=1 → 9-1
9-8 → m=8 → None
Map⟨u; v⟩:
Emit ⟨u; v⟩ and ⟨v; u⟩.
Reduce ⟨u;Γ(u)⟩:
Let m = argmin v∈Γ+(u) lv.
Emit ⟨v; m⟩ for all v where lv > lu.
• large-star操作の流れ
■⼊⼒・出⼒
辺の集合 (接続する頂点の組の集合)
■処理
1. Mapフェーズ
双⽅の頂点をkeyとしてMap
・key=ID① value=ID②
・key=ID② value=ID①
2. keyでグルーピング
3. Reduceフェーズ
グループ内の最⼩ID → keyより⼤きな全ID
の組を出⼒
takemikamiʼs note ‒ http://takemikami.com/
性能改善のために
Copyright (C) Takeshi Mikami. All rights reserved. 12
takemikamiʼs note ‒ http://takemikami.com/
性能改善の考え⽅
• small/large-star操作では、
辺の集合の⾃⼰結合を繰り返す
操作を繰り返すと、次数(接続する辺の数)が⾼い頂点が増える
Copyright (C) Takeshi Mikami. All rights reserved. 13
Connected Components の性能改善の考え⽅を⽰します
→頂点の次数に着⽬したJoin⽅法としてSkewed Joinを考える
a b
d e
g h
f
c
j
k l
i
m
a b
d e
g h
c
j
k l
i
m
f
変換
次数の⾼い頂点が
増える
takemikamiʼs note ‒ http://takemikami.com/
Skewed Joinとは
• Skewed Joinとは
Copyright (C) Takeshi Mikami. All rights reserved. 14
Skewed Joinとは何かを説明します
次数(keyに対して紐付くvalueの数)の⼤⼩によって、
Map/Merge Joinを組み合わせるJoin⽅法
・多数のvalueが紐付くkey → Map Join (Broadcast Join)
・少数のvalueが紐付くkey → Merge Join
※Map Joinの⽅が、keyのソートのコスト⼩さいので多数のvalueが紐付くレコードのJoinは効率が良い
同時に、少数のvalueが紐付くkeyをMerge Joinに振ることでビッグデータに対応する
takemikamiʼs note ‒ http://takemikami.com/
Skewed Joinの⼿続き
• small-star操作を例に説明します
Copyright (C) Takeshi Mikami. All rights reserved. 15
Skewed Joinの⼿続きを説明します
1
8
5
7
9
3
頂点1 頂点2
9 8
8 7
8 5
8 1
7 3
辺の集合想定するグラフ 次数の計算
頂点 次数
9 1
8 3
7 1
← Map Join
← Merge Join
← Merge Join
次数を算出して、
次数が⼤きい頂点をMap Join
次数が⼩さい頂点を Merge Join
takemikamiʼs note ‒ http://takemikami.com/
参考資料リスト
• 参考資料
• Raimondas Kiveris, et al. "Connected Components in MapReduce and Beyond"
2014.
https://dl.acm.org/doi/10.1145/2670979.2670997
• GraphFrames
http://graphframes.github.io/graphframes/docs/_site/
Copyright (C) Takeshi Mikami. All rights reserved. 16
本資料作成にあたって参考にした資料のリストです

MapReduceによるConnected Components(連結成分)の見つけ方

  • 1.
    takemikamiʼs note ‒http://takemikami.com/ MapReduceによる Connected Components(連結成分)の⾒つけ⽅ Copyright (C) Takeshi Mikami. All rights reserved. 1 三上 威 - @takemikami アーリース情報技術株式会社 代表取締役 社⻑ 2020.5.28
  • 2.
    takemikamiʼs note ‒http://takemikami.com/ はじめに •テーマ • MapReduceによる Connected Components(連結成分)の⾒つけ⽅ •内容 • Connected Componentsとは何か • Connected Componentsのアルゴリズム • 性能改善のために Copyright (C) Takeshi Mikami. All rights reserved. 2 この資料で説明する内容について⽰します
  • 3.
    takemikamiʼs note ‒http://takemikami.com/ Connected Componentsとは何か Copyright (C) Takeshi Mikami. All rights reserved. 3
  • 4.
    takemikamiʼs note ‒http://takemikami.com/ Connected Components(連結成分)とは • Connected Componentとは、 • 右のグラフで考えると、 3つのConnected Componentsがある • a, b, d, e • c, f, g, h, j • i, k, l, m Copyright (C) Takeshi Mikami. All rights reserved. 4 Connected Componentsとは何かを説明します a b d e g h f c j k l i m 互いに接続される辺を持たない部分グラフ (辺による接続で到達可能な頂点の集合) Connected ComponentsConnected ComponentsConnected Components
  • 5.
    takemikamiʼs note ‒http://takemikami.com/ DataFrameでのグラフの表現⽅法 1/2 Copyright (C) Takeshi Mikami. All rights reserved. 5 DataFrameによるグラフの表現⽅法を⽰します a b d e g h f c j k l i m 頂点1 頂点2 a b a d b e c f d e f h : : 頂点 a b c d e f : • DataFrameでは 無向グラフを「頂点の集合」「辺の集合」で表現 頂点の集合 辺の集合
  • 6.
    takemikamiʼs note ‒http://takemikami.com/ DataFrameでのグラフの表現⽅法 2/2 • DataFrameでは Connected Componentsを「頂点とConnected Componentの組」で表現 Copyright (C) Takeshi Mikami. All rights reserved. 6 DataFrameによるグラフの表現⽅法を⽰します Connected Components 頂点 Connected Component a 1 b 1 c 2 d 1 e 1 : : a b d e g h f c j k l i m →以降のスライドで 「頂点・辺の集合」から「頂点とConnected Componentの組」の求め⽅を説明 Connected Component 1 Connected Component 2 Connected Component 3
  • 7.
    takemikamiʼs note ‒http://takemikami.com/ Connected Componentsのアルゴリズム Copyright (C) Takeshi Mikami. All rights reserved. 7
  • 8.
    takemikamiʼs note ‒http://takemikami.com/ アルゴリズムの基本的な考え⽅ 1/2 Copyright (C) Takeshi Mikami. All rights reserved. 8 アルゴリズムの基本的な考え⽅を⽰します 1 8 5 7 9 1 8 5 7 9 変換3 3 • Connected Componentsは以下の考え⽅で求める Component内で最も⼩さなIDの頂点が、 他の頂点と接続されるグラフに変換 最⼩IDの頂点
  • 9.
    takemikamiʼs note ‒http://takemikami.com/ アルゴリズムの基本的な考え⽅ 2/2 • 変換は、small/large-star操作が収束するまで繰り返すことで⾏う Copyright (C) Takeshi Mikami. All rights reserved. 9 アルゴリズムの基本的な考え⽅を⽰します small-star操作: ある頂点に注⽬し、その頂点より⼤きいIDを持つ頂点との接続を、最⼩のIDの頂点につなぎ替える large-star操作: ある頂点に注⽬し、その頂点以下のIDを持つ頂点との接続を、最⼩のIDの頂点につなぎ替える 1 8 5 7 9 1 8 5 7 9 1 8 5 7 9 頂点⑧に注⽬したsmall/large-star操作 large-starsmall-star
  • 10.
    takemikamiʼs note ‒http://takemikami.com/ MapReduceによるsmall-star操作 Copyright (C) Takeshi Mikami. All rights reserved. 10 MapReduceによるsmall-star操作の流れを⽰します 頂点⑧に注⽬したsmall-star操作 Map ⟨u; v⟩: if lv ≤ lu then Emit ⟨u; v⟩. else Emit ⟨v; u⟩. end if Reduce ⟨u; N ⊆ Γ(u)⟩: Let m = argmin v∈N∪{u} lv. Emit ⟨v; m⟩ for all v ∈ N. Reduce u-v 8-1,5,7 → m=1 → 8-1, 1-1, 5-1, 7-1 9-8 → m=8 → 9-8 Map u-v 1-8 → 8-1 5-8 → 8-5 7-8 → 8-7 8-9 → 9-8 1 8 5 7 9 • small-star操作の流れ 1 8 5 7 9 ■⼊⼒・出⼒ 辺の集合 (接続する頂点の組の集合) ■処理 1. Mapフェーズ key=⼤きなID value=⼩さなID としてMap 2. keyでグルーピング 3. Reduceフェーズ 全てのID → グループ内の最⼩IDの組を出⼒
  • 11.
    takemikamiʼs note ‒http://takemikami.com/ MapReduceによるlarge-star操作 Copyright (C) Takeshi Mikami. All rights reserved. 11 MapReduceによるlarge-star操作の流れを⽰します 頂点⑧に注⽬したlarge-star操作 1 8 5 7 9 1 8 5 7 9 Map u-v 1-8 → 1-8, 8-1 5-8 → 5-8, 8-5 7-8 → 7-8, 8-7 8-9 → 8-9, 9-8 Reduce u-v 1-8 → m=1 → 8-1 5-8 → m=5 → 8-5 7-8 → m=7 → 8-7 8-1,5,7,8,9 → m=1 → 9-1 9-8 → m=8 → None Map⟨u; v⟩: Emit ⟨u; v⟩ and ⟨v; u⟩. Reduce ⟨u;Γ(u)⟩: Let m = argmin v∈Γ+(u) lv. Emit ⟨v; m⟩ for all v where lv > lu. • large-star操作の流れ ■⼊⼒・出⼒ 辺の集合 (接続する頂点の組の集合) ■処理 1. Mapフェーズ 双⽅の頂点をkeyとしてMap ・key=ID① value=ID② ・key=ID② value=ID① 2. keyでグルーピング 3. Reduceフェーズ グループ内の最⼩ID → keyより⼤きな全ID の組を出⼒
  • 12.
    takemikamiʼs note ‒http://takemikami.com/ 性能改善のために Copyright (C) Takeshi Mikami. All rights reserved. 12
  • 13.
    takemikamiʼs note ‒http://takemikami.com/ 性能改善の考え⽅ • small/large-star操作では、 辺の集合の⾃⼰結合を繰り返す 操作を繰り返すと、次数(接続する辺の数)が⾼い頂点が増える Copyright (C) Takeshi Mikami. All rights reserved. 13 Connected Components の性能改善の考え⽅を⽰します →頂点の次数に着⽬したJoin⽅法としてSkewed Joinを考える a b d e g h f c j k l i m a b d e g h c j k l i m f 変換 次数の⾼い頂点が 増える
  • 14.
    takemikamiʼs note ‒http://takemikami.com/ Skewed Joinとは • Skewed Joinとは Copyright (C) Takeshi Mikami. All rights reserved. 14 Skewed Joinとは何かを説明します 次数(keyに対して紐付くvalueの数)の⼤⼩によって、 Map/Merge Joinを組み合わせるJoin⽅法 ・多数のvalueが紐付くkey → Map Join (Broadcast Join) ・少数のvalueが紐付くkey → Merge Join ※Map Joinの⽅が、keyのソートのコスト⼩さいので多数のvalueが紐付くレコードのJoinは効率が良い 同時に、少数のvalueが紐付くkeyをMerge Joinに振ることでビッグデータに対応する
  • 15.
    takemikamiʼs note ‒http://takemikami.com/ Skewed Joinの⼿続き • small-star操作を例に説明します Copyright (C) Takeshi Mikami. All rights reserved. 15 Skewed Joinの⼿続きを説明します 1 8 5 7 9 3 頂点1 頂点2 9 8 8 7 8 5 8 1 7 3 辺の集合想定するグラフ 次数の計算 頂点 次数 9 1 8 3 7 1 ← Map Join ← Merge Join ← Merge Join 次数を算出して、 次数が⼤きい頂点をMap Join 次数が⼩さい頂点を Merge Join
  • 16.
    takemikamiʼs note ‒http://takemikami.com/ 参考資料リスト • 参考資料 • Raimondas Kiveris, et al. "Connected Components in MapReduce and Beyond" 2014. https://dl.acm.org/doi/10.1145/2670979.2670997 • GraphFrames http://graphframes.github.io/graphframes/docs/_site/ Copyright (C) Takeshi Mikami. All rights reserved. 16 本資料作成にあたって参考にした資料のリストです