• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
並列データベースシステムの概念と原理
 

並列データベースシステムの概念と原理

on

  • 10,860 views

2014/01/30 筑波大学情報システム特別講義Dの講義資料です。 ...

2014/01/30 筑波大学情報システム特別講義Dの講義資料です。
join関係はNAIST時代の宮崎先生のデータ工学Ⅱの内容を参考にしてます。

animation有効なビデオはこちら
https://vimeo.com/85598907

Statistics

Views

Total Views
10,860
Views on SlideShare
10,565
Embed Views
295

Actions

Likes
60
Downloads
135
Comments
0

7 Embeds 295

https://twitter.com 276
http://mocobeta-bookmark.tumblr.com 10
http://s.deeeki.com 3
http://t.co 2
http://www.slideee.com 2
http://b.hatena.ne.jp 1
http://www.linkedin.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    並列データベースシステムの概念と原理 並列データベースシステムの概念と原理 Presentation Transcript

    • 並列データベースシステム の概念と原理 産業技術総合研究所 情報技術研究部門 油井 誠 <m.yui@aist.go.jp> 2014/01/30 筑波大学情報システム特別講義D
    • 講演趣旨  情報化社会の進展とともに、情報爆発、BigDATAなどが バズワードになるほど、巨大なデータを利活用すること が重要な課題となっている    教科書(少なくとも日本語)には載っていないような、 教科書レベルより一歩進んだ話題を扱う    DWHアプライアンスやHadoopなどを利用した大規模データ処理 は、企業でも今後一般化していく(と思われる) 大規模データ処理で核となる技術について紹介する DBの話題は正規化、関数従属性、トランザクションだけではない 関係データベースの基礎を習得していることが望ましいが、知ら なくても付いていける内容(のはず)です 近年の先進的かつ重要なデータ工学システムの概念およ び技術を習得することを目的とする 2
    • 講義内容  序論 - 並列データベースの前に  並列処理の基礎   並列処理のTerminology 並列計算機アーキテクチャ  並列データベースのアーキテクチャ  データベース処理の並列化  結合処理の高速化     並列ハッシュ結合 並列ソート パーティショニング手法 多重結合や計算機間のデータ交換で発生する問題  MapReduceによる関係演算の並列処理 3
    • データベース開発の流れ  Coddの論文: 1970年     System RやIngres: 70年代中盤 Oracle, IBM DB2, Ingres: 80年代序盤 並列データベースの隆盛: 80年代後半   A Relational Model of Data for Large Shared Data Banks, Communications of ACM 商用: Teradata, Tandem、アカデミア: Gamma, SDC Google MapReduce発表: 2004年  並列データベースに再び脚光が集まる  DeWitt, Stonebraker: MapReduce: A Major Step Backwards 「ちっとも革新的な所がない。25年前に開発された技術を実装したもの でしかない」 並列データベース技術の再訪、MapReduceも並列DBと同様の道を辿っている  10+スタートアップが開発/exit競争: 現在 Netezza => IBM, Greenplum => EMC, Vertica => HP, Aster Data => Teradata, DATAllegro => MS, Kickfire, ParAccel, Exasol etc. 4
    • 並列/分散データベース  並列データベースシステム  データベースの関係演算を高速に実行することが目的    性能追求型のシステム   基本的に、単一のデータセンタ内での運用 トランザクション処理よりも複雑な分析問合せを処理をするのに 適する   結合(Join)処理の並列化 Sort処理の並列化 PostgreSQLやMySQL単体だとデータウェアハウスのベンチマーク標準TPC-H で10GBも満足も処理できない 分散データベースシステム   地理的に離れ、ネットワークで接続された複数のデータベースを 束ねて処理することが目的 並列処理は主眼ではない 5
    • 並行/並列/分散コンピューティング Concurrent (並行) Task1-a Task1-b Task1-b Task1-a timeline アプリケーションからみて 論理的に並行に実行される e.g., マルチタスクOSのスケジューリング Parallel (並列) Task1-a Task1-b Task1-a Task1-b 物理的に並行に実行される timeline Distributed (分散) Node 1 node 2 Node 3 ネットワークを介した複数の 計算機でタスクを処理すること (同時実行とは直接関係はない) 6
    • 並列処理の基礎  パイプライン並列(pipeline parallel)  依存関係のある演算を直列に並べて、各演算ステップを複数の PEでconcurrentに処理    入力⇒出力⇒入力のデータをパイプライン的に流す Dependent parallelとも言われる 独立並列(Independent parallel) op2 データの依存関係 op3 op1 op5 Pipeline並列が可能 op4 7
    • 並列処理の基礎  パイプライン並列(pipeline parallel)  依存関係のある演算を直列に並べて、各演算ステップを複数の PEでconcurrentに処理    入力⇒出力⇒入力のデータをパイプライン的に流す Dependent parallelとも言われる 独立並列(Independent parallel)   演算を並列にならべて、依存関係のない演算を複数のPEで parallelに処理 データ並列やパーティション並列とも言われる op2 データの依存関係 op3 op1 op4 op5 独立並列に実行しやすいようにデータを 分割(partitioning)しておくことが重要 8
    • なぜデータ並列が重要か At 10 MB/s 1.2 days to scan 1 Terabyte 1,000並列 1.7 minutes to scan 1 Terabyte 10 MB/s Materials taken from “Readings in Database Systems”, Joseph M. Hellerstein and Michael Stonebraker, eds. 9
    • 計算環境の高性能化のアプローチ  スケールアップ    サーバの計算能力(メモリ、CPU)の増強 システム構築時のハードウェアによって限界が規定される スケールアウト   サーバ台数を増やして計算能力の増強 その環境で動作するソフトウェアが規定 10
    • 並列計算機のアーキテクチャ  Shared-nothing(無共有型)      コモディティな計算機を利用可能 Scale-out構成がとれる メモリアクセスとディスクバンド幅を最大限利用可能 データの同期処理が困難(管理ノード等が必要) ローカリティを活かすことが重要  データ分割(partitioning)が重要 PE1 PE2 PE3 PE4 CPU CPU CPU CPU Mem Mem Mem Mem Disk Disk Disk Disk プロセッサ要素 (Processor Element) ネットワーク 11
    • 並列計算機のアーキテクチャ  Shared-memory(共有メモリ)  単一のメモリ空間を共有できるのでプログラミングは容易 (メモリ上で同期処理をすればよい)   専用の相互接続網を利用するため高価 Scale-up構成によりスケーラビリティに制限がある  メモリバンド幅が相互接続網によって制限をうける  最大CPU接続数に制限がある PE1 PE2 PE3 PE4 CPU CPU CPU CPU Mem Mem Mem Mem 相互接続網 プロセッサ要素 (Processor Element) (バス/クロスバースイッチ) Mem Disk Disk Disk Disk 12
    • 並列計算機のアーキテクチャ  Shared-disk(共有ディスク)  ネットワーク帯域とストレージの性能依存     I/Oに関してScale-up型の構成となる ファイバーチャネル等の高価な高速ネットワークが前提 共有ディスク上でのデータ同期をする ディスクバンド幅がStorage Area Networkの性能で制限される PE1 PE2 PE3 PE4 CPU CPU CPU CPU Mem Mem Mem Mem プロセッサ要素 (Processor Element) 高速ネットワーク Storage 13
    • 並列データベースの実行環境  Shared-nothing(無共有型)      Shared-memory(共有メモリ)    Hard to program / Cheap to build / Easy to scale-up Teradata, Greenplum 等、現在の並列データベースで主流の構成 MapReduce等もこの構成 一般的に同期処理の少ないバッチ処理/分析タスクに適する Easy to program / Expensive to build / Hard to scale-up VMS cluster、MySQL cluster MySQL clusterはN/Wを介したメッセージパッシングによりオンメモリテーブル を共有( HWは無共有型だが、SWレベルで共有メモリ型) Shared-disk(共有ディスク)    プログラミングのしやすさやスケールアップのしやすさは Shared-nothingとshared-memoryの中間 Oracle RAC, DB2 pure scale トランザクション処理をする既存DBの高性能化でよく利用される 現在のトレンドはShared-Nothing (共有ディスクに移行したDB2のような例もあり、用途次第) 14
    • データベース処理の並列化  Intra-query並列化  Intra-operator並列化  Scan, Sort, Join, Aggregation等を並列に処理 Inter-operator並列化  Join 問合せ木の中の並列性を抽出して並列実行   Sort scan scan A B それぞれの演算が異なるサイトでconcurrentに動作  Pipeline並列化  Inter-query並列化  複数の独立したクエリを異なるProcessor Elementが 並列に実行する   複数のトランザクションの並列実行 多くのインターネットサービスプロバイダが行っている Database shardingはこのタイプ  e.g., IDの範囲ごとにDBを分けてトランザクションを分割 15
    • Nested-loop Join (入れ子ループ結合) 結合処理はデータベースで もっとも重たい処理 SELECT C.name, C.email FROM Customers C, Sales S WHERE C.custId = S.custId and S.amount > 1000 C.name, C.email nested-loop join projection for each s for each c s.custid = c.custid C.custId = S.custId Eq-Join 外側テーブル (N件) 内側テーブル (M件) Selection Sales表 Customer表 3 7 1 4 S.amount > 1000 2 4 9 2 タプル読み書き回数から 時間計算量 O(N×M) 外1行毎に 全スキャン 16
    • Hash Join (ハッシュ結合)  等結合の場合 R[i].attr=S[j].attr  h(R[i].attr) = h(S[j].attr)が成り立つ  ただし、h(x)はハッシュ関数 R h(R)=0 h(R)=1 h(R)=2 h(R)=3 h(S)=0 S h(S)=1 h(S)=2 h(S)=3 突き合せる領域が圧倒的に減る 17
    • Hash Join Buildフェーズ   事前に内側テーブルのハッシュ表を作成 Probeフェーズ   外側テーブルを一行づつ読み込み、ハッシュ関数を適用したタ プルと対応するハッシュバケット内のタプルを照合 内側テーブル 外側テーブル (M件) scan Hash bucket (N件) 3 2 7 build probe 1 4 h(x) h(x) 4 2 9 Hash表 二次記憶へのタプル読み書き回数から 時間計算量 O(N+M) Pros: 一度ハッシュ表を作ってし まえばメモリ内の検索なの で高速 Cons: ハッシュ表がメモリに収ま らないと性能劣化、巨大 データに使えない 先頭から一列づつ probe 18
    • Grace Hash Join (Kitsuregawa et al.)  ハッシュ表がメモリから溢れる場合の結合アルゴリズム  Splitフェーズ build R h1(x) R1 R2 Joinフェーズ   S … Rn  build h1(x) h2(x) h1とh2でハッシュ関数が 異なってもよい h2(x) Hash表 … N+Mの読み込み N+Mの書き込み N+Mの読み込み probe Ri S2 Sn ハッシュバケットを メモリに乗切る量ごとに ファイルに格納 ここは通常のHash Joinと同じ(build⇒probe) この作業を各バケットごとに行う 並列化可能! build S1 Si タプル読み書き回数から 時間計算量 O(3(N+M)) 19
    • Hybrid Hash Join (Gamma by DeWitt et al.)  Grace Hash Joinのちょっとした改良  Splitフェーズ   それぞれ1つのバケットR1をメモリ上に保持しておく h1(s)=1に関しては、R1を使って、この段階でprobeしてしまう R1を使ってprobe build R h1(x) R1 R2 … build S h1(x) Rn S2 … Sn (N + M)% BucketSize 分のディスク 読み書きを削減 タプル読み書き回数から 時間計算量 O( 3(N+M)-2(N+M)/BucketSize ) 20
    • Parallel Grace Hash Join (Kitsuregawa et al.)  Graceハッシュ結合をn台の計算機を利用して 並列に行うもの  Splitフェーズで計算機間にパーティショニング   結合キーで予めデータ分割されていればデータ交換不要 Joinフェーズは各計算機でローカルに並列実行 build R h1(x) R1 R2 … Rn build S h1(x) S1 S2 … Sn ハッシュ値の偏りに対処した分散バケット法も提案されている Bucket spreading parallel hash: a new, robust, parallel hash join method for data skew in the super database computer, Masaru Kitsuregawa, Yasushi Ogawa, In Proc. VLDB, 1990. 21
    • 結合以外の関係演算の並列処理  選択、射影演算  各PEで独立に演算  集約演算   結合則と交換則を満たせば並列化可能 各PEでPartial aggregation(部分集約)した結果をまとめる      分割統治してO(logN) Group-byによるグループ化演算   count(S) = S count(s(i)) sum(s) = S sum(s(i)) avg(S) = S sum(s(i)) / S count(s(i)) グループ化する属性値に基づいて並列ハッシュ結合と同様の手法 で計算 ソート演算  マージソートの並列化、部分奇数ソートの並列化 22
    • マージソートの並列化  各runごとの2wayのマージを複数のPEで並列 に実行 問題点:処理が進むごとに並列性が落ちる  3,4 6,2 9,4 8,7 5,6 3,1 3,4 2,6 4,9 7,8 5,6 1,3 入力ファイルは適度にブロック分割 2 2 4,7 8,9 2,3 4,6 1,3 5,6 2,3 4,4 6,7 8,9 2 1,2 3,5 6 1,2 2,3 3,4 4,5 6,6 7,8 9 1st run 8並列 2nd run 4並列 3rd run 2並列 4th run Runが進むごとに遊休PEが発生 23
    • 部分奇数ソートの並列化 1. 2. 各PEで、ソートキーの上位数ビットのみを用いてnグ ループに分割 分割されたグループを各PEに転送 バケットの偏りは問題 ⇒バケットのbin packing問題をfirst fitアルゴリズムでとけばよい (バケットを割り当て済み容量のもっとも小さいPEに埋める) 3. 各PEで独立並列にソート 0100011 1100101 1011101 0011111 … 00 PE2 PE1 11 01 0011111 PE3 1100101 0100011 00 10 0011111 11 1011101 1111011 1100101 01 1111010 0011011 0111101 0011010 0111010 10 1000011 24
    • 部分奇数ソートの並列化 1. 2. 各PEで、ソートキーの上位数ビットのみを用いてnグ ループに分割 分割されたグループを各PEに転送 バケットの偏りは問題 ⇒バケットのbin packing問題をfirst fitアルゴリズムでとけばよい (バケットを割り当て済み容量のもっとも小さいPEに埋める) 3. 各PEで独立並列にソート 0100011 1100101 1011101 0011111 … PE1 PE2 PE3 00 01 Bucket spreading parallel hash: a new, robust, parallel hash join method 1100101 0011111 for data skew in 0100011 the super database computer, Masaru Kitsuregawa, 00 1111011 Yasushi Ogawa, In Proc. VLDB, 1990. 01 11 10 11 0011111 1111010 0111101 10 1011101 1100101 のbucket spreading法を応用するとこれらのフェーズを賢く実装出来るので興 0111010 1000011 0011010 味がある方は読んでみるとよい 0011011 25
    • データ分割  Range partitioning    Pros. 範囲問合せや結合が容易 Cons. データの偏りが発生 Round-robin partitioning   選択、射影演算ぐらいにしか使えない i-p q-z a Pros. データの偏りが少ない  負荷の均等分散が可能 Cons. 等結合も範囲問合せも困難   a-h z a d c f b e a z Hash partitioning  Pros. 比較的データの偏りが小さい   Pros. 等結合に適する   偏りを小さくする手法が確立されている 並列ハッシュ結合で高速実行できる b d a c e Hash(x) a z Cons. 範囲問合せが困難 多くの商用並列DBでハッシュ分割+並列Graceが採用されている パーティショニングはデータ並列への鍵 26
    • データ分割  Range partitioning    なおList partitioningというのもあり、Range partitioning q-z i-p a-h Pros. 範囲問合せや結合が容易 は暗黙的なList partitioningといえる Cons. データの偏りが発生 Round-robin partitioning   Pros. データの偏りが少ない  負荷の均等分散が可能 Cons. 等結合も範囲問合せも困難   a 選択、射影演算ぐらいにしか使えない a d z c f b e a z Hash partitioning  Pros. 比較的データの偏りが小さい   Pros. 等結合に適する   偏りを小さくする手法が確立されている 並列ハッシュ結合で高速実行できる b d a c e Hash(x) a z Cons. 範囲問合せが困難 多くの商用並列DBでハッシュ分割+並列Graceが採用されている パーティショニングはデータ並列への鍵 27
    • Partitioned Join  事前にデータ分割を行うパーティション並列を活かした結 合処理   並列ハッシュ結合のsplitフェーズを省略してローカルにJoin 事前データ分割に用いる属性の選択が鍵 Join on R.x = S.x build R h1(x) R1 S1 R2 S2 … … Rn build S Sn 事前にデータ分割 h1(x) 事前にデータ分割 28
    • 多重結合(Multi-way Joins)の問題  タプルの再分散が発生してしまう Select R1.A, R3.B From R1, R2, R3 Where R1.A = R2.A and R2.B = R3.B Requires R2 partitioned by attribute A Join Requires R2 partitioned by attribute B Conflict Shuffle R3 Join R1 R2 29
    • Shuffleの問題点  スパコンとは異なり、汎用の計算機クラスタではラック 間の接続が細い(48Gbps未満)   バイセクションバンド幅(全ての計算ノードが全力で通信した 時にシステム全体で達成しうる通信性能)が低い Many-to-one通信パターンで tcpパケットの再送が発生 http://www.pdl.cmu.edu/Incast/ Root switch Rack switch 10GbE Rack switch 1GbE DB DB Node DB Node 1 rack DB Node DB Node DB Node Ethernet Node FAT-tree (Tsubame2で採用) 30
    • Shuffleの問題点  スパコンとは異なり、汎用の計算機クラスタではラック 間の接続が細い(48Gbps未満)   バイセクションバンド幅(全ての計算ノードが全力で通信した 時にシステム全体で達成しうる通信性能)が低い Many-to-one通信パターンで tcpパケットの再送が発生 http://www.pdl.cmu.edu/Incast/ 猛烈shuffleにはTCP incastという問題があり、商用並列DBではtcp以外の独自 ネットワークプロトコルが利用されている Root switch Rack switch 10GbE Rack switch 1GbE DB DB Node DB Node 1 rack DB Node DB Node DB Node Ethernet Node FAT-tree (Tsubame2で採用) 31
    • Shuffleの問題点  ネットワークでの競合以外にも送信側、受信側もそれぞ れボトルネックに成りえる At a sender At a receiver In the network Facebookのある一週間の実績(188,000 MapReduce jobs、3000ノード) では、全体の33%の時間がshuffleに費やされている Orchestra, Proc. SIGCOMM, 2011  Shuffle処理では、タプルのディスクからの読み出し、タ プルごとのハッシュ値の計算といったコストもかかる 32
    • MapReduce  複雑な分散処理を単純なプログラミングモデルに包んで 抽象化   並列ハッシュ結合のSplitと同じことをshuffleでやっている ユーザはmap/Reduce関数を書くだけ map(k1, v1) => k2, v2 reduce(k2,list<v2>) => k3, v3 Map Merge Sort reduce Merge Sort reduce Shuffle Map Map Local disk write/read Local Disk write/read 33
    • MapReduceの実行イメージ Machine 1 <k1, v1> <k2, v2> <k3, v3> <nk1, nv1> <nk2, nv2> <nk3, nv3> Local Map <nk1, nv1> <nk3, nv3> <nk1, nv6> Global Shuffle <nk1, nv1> <nk1, nv6> <nk3, nv3> Local Sort <nk1, 2> <nk3, 1> Local Reduce Machine 2 <k4, v4> <k5, v5> <k6, v6> <nk2, nv4> <nk2, nv5> <nk1, nv6> <nk2, nv4> <nk2, nv5> <nk2, nv2> <nk2, nv4> <nk2, nv5> <nk2, nv2> <nk2, 3> 34
    • ワードカウントの実行例 入力ファイル: doc1 foo foo foo bar bar buz Map Input Output Map Map DFS Reduce Reduce shuffle DFS 35
    • ワードカウント – map input 入力ファイル: doc1 foo foo foo bar bar buz map(k1, v1) => k2, v2 doc1: foo doc1: foo Map Reduce doc1: foo doc1: bar Input Output Map doc1: bar doc1: buz Map DFS Reduce shuffle DFS 36
    • ワードカウント – map output 入力ファイル: doc1 foo foo foo bar bar buz map(k1, v1) => k2, v2 foo: 1 foo: 1 doc1: foo doc1: foo Map doc1: foo doc1: bar Input Output Map doc1: bar doc1: buz bar: 1 buz: 1 Map DFS Reduce foo: 1 bar: 1 Reduce shuffle DFS 37
    • ワードカウント – reduce input 入力ファイル: doc1 foo foo foo bar bar buz reduce(k2,list<v2>) => k3, v3 foo: 1 foo: 1 bar: <1,1> buz: <1> Map Reduce foo: 1 bar: 1 Input Output Map bar: 1 buz: 1 Map DFS foo: <1, 1, 1> Reduce shuffle DFS 38
    • ワードカウント – reduce output 入力ファイル: doc1 foo foo foo bar bar buz reduce(k2,list<v2>) => k3, v3 bar: 2 buz: 1 bar: <1,1> buz: <1> Map Input Reduce Output Map foo: <1, 1, 1> Map DFS foo: 3 Reduce shuffle DFS 39
    • ワードカウントの実行例 入力ファイル: doc1 ワードカウント結果 foo foo foo bar bar buz bar: 2 buz: 1 foo: 3 bar: 2 buz: 1 Map Input Reduce Output Map foo: 3 Map DFS Reduce shuffle DFS 40
    • MapReduce Internal  基本的に次のフェーズから成る  map, shuffle(copy+sort)、reduce Tom White: Hadoop: The Definitive Guideより抜粋 41
    • MapReduce Internal 並列データベースだとmapからreduceへの入力はpushされるが、  基本的に次のフェーズから成る MapReduceは実際にはreducerがmapperの出力をpullするという モデルになっている  map, shuffle(copy+sort)、reduce Tom White: Hadoop: The Definitive Guideより抜粋 42
    • MapReduceによる関係演算の実行 pv_users pageid age 1 25 2 25 1 32 2 25 pageid age count 1 25 1 2 25 2 1 32 1 SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age 43
    • GROUP BY in MapReduce SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age pv_users pageid age key value key value pagei 1 25 <1,25> 1 <1,25> 1 1 2 25 <2,25> 1 <1,32> 1 1 Map pageid 1 age 32 key <1,32> value 1 Shuffle Sort Reduce key <2,25> value 1 pagei 2 2 25 <2,25> 1 <2,25> 1 44
    • GROUP BY in MapReduce SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age key value key value pageid age count <1,25> 1 <1,25> 1 1 25 1 <2,25> 1 <1,32> 1 1 32 1 pageid age count 2 25 2 key <1,32> <2,25> value 1 1 Shuffle Sort Reduce key <2,25> <2,25> value 1 1 45
    • Reduce-side Join Map task 1 テーブルR(a,b)をスキャン 各タプルごとにb属性を出力キーとして hash(b)=iのReduceタスクにタプルを送信 Reduce task i R.b=S.b Map task 2 結合処理をreducer側で行う テーブルS(b,c)をスキャン 各タプルごとにb属性を出力キーとして hash(b)=iのReduceタスクにタプルを送信 46
    • Reduce-side Join Example SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.userid = u.userid) page_view pageid userid time userid value userid value 1 111 9:08:01 111 <pageid,1> 111 <pageid,1> 2 111 9:08:13 111 <pageid,2> 111 <pageid,2> 1 222 9:08:14 222 <pageid,1> 111 <age,25> Map user Shuffle Sort Reduce userid age gender userid value userid value 111 25 female 111 <age,25> 222 <pageid,1> 222 32 male 222 <age,32> 222 useridが <age,32> 47
    • Reduce-side Join Example SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.userid = u.userid) pv_users userid value userid value 111 <pageid,1> 111 <pageid,1> pageid age 111 <pageid,2> 111 <pageid,2> 1 25 222 <pageid,1> 111 <age,25> 2 25 Map Shuffle Sort Reduce userid value userid value 111 <age,25> 222 <pageid,1> 222 <age,32> 222 <age,32> useridが同じpageidとageの組合せを列挙 pageid age 1 32 48
    • Map-side Join (Fragment and Replicate Strategy)   小さなテーブルを全ノードにコピーしてmap側で結合 処理を実行 問題点: データ量に対するスケーラビリティ   データを全ノード(タスク)にコピーしなければならない 複製するテーブルが巨大だったらローカルの結合処理でボトル ネックとなる Fragment (large table) Map tasks: Split 1 Duplicate (small table) Split 2 Split 3 Split 4 Duplicate 49
    • Multi-way Join by MapReduce A (A join B on A.k1=B.k1) as AB join C on AB.k1 = C.k2 k1 av 1 111 AB k1 B av 1 k1 bv 1 bv ABC 111 222 MapReduce 222 k1 C MapReduce k2 bv cv 111 222 333 cv 1 1 av 333 複数回のMapReduceイテレーションが必要 ⇒Shuffleのオーバヘッドや分散ファイルシステム への入出力が増える 50
    • Multi-way Join for M/R [Arfati & Ullman, EDBT 2010]  R.B=S.B and S.C = T.Cの結合のときに、hash(B) とhash(C)をshuffleに用いる    Rには属性Cは存在しない⇒すべてのノードに複製を置く MapReduceのイテレーションは一回で済む タプルの一位性が崩れるので、事前のデータ分割には使 えない R(A,B) h(B,C) 0 1 S(B,C) 2 T(C,D) 3 4 X軸=hash(C) 5 0 1 2 3 4 Y軸=hash(B) 5 51
    • 本日話した内容のまとめ BigDataに対処するための並列データ処理技術を紹介した  並列データベースの構成法   Shared-{Nothing|Disk|Memory}等のアーキテクチャ 並列ハッシュ結合、並列ソート     BigDataの技術的に最も困難な課題は巨大なデータ同士のN×Nの結合 データ分割(ハッシュ、範囲、Round-Robin) 多重結合(multi-way Join)やshuffleといった並列処理で 発生する問題 ⇒ データ並列、Partitioned Parallelの重要性 MapReduceを利用した関係演算の処理手法  Facebook Hive(Hadoop), Google BigQueryなどでは、SQLイ ンタフェースをMapReduceの上に被している   関係データベースの機能(ビューや索引、統計情報の利用)を取り込みつつある MapReduceでは並列DBと同様のコア技術が使われている  大きな違いはトランザクションのありなし、非構造データの扱いやすさ、構 造データを扱う上での効率、分散ファイルシステムを前提とするか否か 52