KVSをWebアプリのメインストレージにしたら、集計バッチをMapReduceでやるはめになったでござるの巻<br />松本 一輝<br />Lang-8, Inc.<br />
TinyMapReduce<br />DRuby上で動く原始的なMapReduceのサンプル<br />200行くらい<br />対障害性ゼロ<br />Lang-8でサイトデータ等の分析に使用<br />http://github.com/k...
MapReduce?<br />膨大なデータ群に対して、ユーザが定義するMap関数、Combiner関数、Reduce関数を適用するためのフレームワーク<br />データを細かく分割することにより、並列実行が可能。リニアにスケールする<br /...
MapReduce 概要<br />例:1~11までの自然数に含まれる2の倍数および3の倍数の個数をカウントする。<br />[1,2,3,4,5,6,7,8,9,10,11]<br />分割数 M=3<br />[1,2,3,4]<br />...
Map関数:Value->Hash<br /> 1 , 2 , 3 , 4 <br />{  }   ,   { “2の倍数” =&gt; 1 }   ,  { “3の倍数” =&gt; 1 }   ,  { “2の倍数” =&gt; 1 } ...
Combiner関数:HashのArray->Hash<br />[ {  }   ,   { “2の倍数” =&gt; 1 }   ,  { “3の倍数” =&gt; 1 }   ,  { “2の倍数” =&gt; 1 } ]<br />{ ...
Reduce関数:Array -> Value<br />Key:“2の倍数”<br />[ 2,2,1] -> 5<br />Key:“3の倍数”<br />[ 1,1 ,1] -> 3<br />
MapReduceの何が嬉しいのか<br />一見、まわりくどい<br /> (シングルマシンで実行したときの<br />  効率はとても悪い)<br />しかし、リニアにスケールする<br />
MapReduce 構成 <br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />入力データ<b...
Masterが指令 <br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />入力データ<br />
入力データを分割取得<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />#2<br />#m...
Map/Combiner関数を適用・中間結果出力<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<b...
Shuffle: 同じKeyを寄せ集め<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />中...
中間データを分割取得<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />#2<br />#r...
Reduce関数を適用・結果を出力<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />#1…...
DEMO<br />
RDBからKVSへ<br />レコードがスキーマレスになる<br />  -> プライマリキーでしか叩けない<br />  ->SQLで集計プログラムを作れない<br />MapReduceの採用により、<br />DWHに匹敵する分析力を<b...
長所<br />高速(IOがボトルネックにならない)<br />  ※MapReduceは分散KVSとセットで<br />  運用しないと(あまり)意味がない。<br />  (Fairy& Roma、<br />   MapReduce & ...
短所<br />インフラ準備に手間がかかる<br />
まとめ<br />      ☆ チン     マチクタビレタ~                        マチクタビレタ~       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄        ヽ ___\(\・∀・) < Fa...
Upcoming SlideShare
Loading in …5
×

TinyMapReduce on ruby

1,955
-1

Published on

TinyMapReduce on ruby

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,955
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

TinyMapReduce on ruby

  1. 1. KVSをWebアプリのメインストレージにしたら、集計バッチをMapReduceでやるはめになったでござるの巻<br />松本 一輝<br />Lang-8, Inc.<br />
  2. 2. TinyMapReduce<br />DRuby上で動く原始的なMapReduceのサンプル<br />200行くらい<br />対障害性ゼロ<br />Lang-8でサイトデータ等の分析に使用<br />http://github.com/kazuki-m/TinyMapReduce<br />
  3. 3. MapReduce?<br />膨大なデータ群に対して、ユーザが定義するMap関数、Combiner関数、Reduce関数を適用するためのフレームワーク<br />データを細かく分割することにより、並列実行が可能。リニアにスケールする<br />Googleの中の人が発案<br />
  4. 4. MapReduce 概要<br />例:1~11までの自然数に含まれる2の倍数および3の倍数の個数をカウントする。<br />[1,2,3,4,5,6,7,8,9,10,11]<br />分割数 M=3<br />[1,2,3,4]<br />[9,10,11]<br />[5,6,7,8]<br />
  5. 5. Map関数:Value->Hash<br /> 1 , 2 , 3 , 4 <br />{ } , { “2の倍数” =&gt; 1 } , { “3の倍数” =&gt; 1 } , { “2の倍数” =&gt; 1 } <br /> 5 , 6 , 7 , 8 <br />{ } , { “2の倍数” =&gt; 1 , “3の倍数” =&gt; 1 } , { } , { “2の倍数” =&gt; 1 } <br />9, 10, 11<br />{“3の倍数” =&gt; 1}, {“2の倍数” =&gt; 1} , { } <br />
  6. 6. Combiner関数:HashのArray->Hash<br />[ { } , { “2の倍数” =&gt; 1 } , { “3の倍数” =&gt; 1 } , { “2の倍数” =&gt; 1 } ]<br />{ “2の倍数” =&gt; 2 , “3の倍数” =&gt; 1 } <br />[{ } , { “2の倍数” =&gt; 1 } , { “3の倍数” =&gt; 1 } , { “2の倍数” =&gt; 1 } ]<br />{ “2の倍数” =&gt; 2 , “3の倍数” =&gt; 1 }<br />[ {“3の倍数” =&gt; 1}, {“2の倍数” =&gt; 1} , { } ]<br />{ “3の倍数” =&gt; 1, “2の倍数” =&gt; 1 }<br />
  7. 7. Reduce関数:Array -> Value<br />Key:“2の倍数”<br />[ 2,2,1] -> 5<br />Key:“3の倍数”<br />[ 1,1 ,1] -> 3<br />
  8. 8. MapReduceの何が嬉しいのか<br />一見、まわりくどい<br /> (シングルマシンで実行したときの<br />  効率はとても悪い)<br />しかし、リニアにスケールする<br />
  9. 9. MapReduce 構成 <br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />入力データ<br />
  10. 10. Masterが指令 <br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />入力データ<br />
  11. 11. 入力データを分割取得<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />#2<br />#m<br />#1<br />・・・<br />入力データ<br />
  12. 12. Map/Combiner関数を適用・中間結果出力<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />#2<br />#m<br />#1<br />・・・<br />中間データ<br />入力データ<br />
  13. 13. Shuffle: 同じKeyを寄せ集め<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />中間データ<br />#2<br />#m<br />#1<br />・・・<br />入力データ<br />
  14. 14. 中間データを分割取得<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />#2<br />#r<br />#1<br />#2<br />#m<br />#1<br />・・・<br />・・・<br />中間データ<br />入力データ<br />
  15. 15. Reduce関数を適用・結果を出力<br />Master<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />Worker<br />#1…<br />#2<br />#r<br />#1<br />#2<br />#m<br />#1<br />・・・<br />・・・<br />中間データ<br />入力データ<br />出力データ<br />
  16. 16. DEMO<br />
  17. 17. RDBからKVSへ<br />レコードがスキーマレスになる<br />  -> プライマリキーでしか叩けない<br />  ->SQLで集計プログラムを作れない<br />MapReduceの採用により、<br />DWHに匹敵する分析力を<br />分散KVS上で実現可能<br />
  18. 18. 長所<br />高速(IOがボトルネックにならない)<br />  ※MapReduceは分散KVSとセットで<br />  運用しないと(あまり)意味がない。<br />  (Fairy& Roma、<br />   MapReduce & GFS/BigTable 等)<br />集計プログラムの作成が容易<br />
  19. 19. 短所<br />インフラ準備に手間がかかる<br />
  20. 20. まとめ<br />      ☆ チン     マチクタビレタ~                        マチクタビレタ~       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄        ヽ ___\(\・∀・) < Fairyまだ~?            \_/⊂ ⊂_ )   \________          / ̄ ̄ ̄ ̄ ̄ ̄ /|       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |       |  愛媛みかん  |/<br />

×