More Related Content
Similar to Rubyによるお手軽分散処理
Similar to Rubyによるお手軽分散処理 (20)
Rubyによるお手軽分散処理
- 1. Ruby
によるお手軽分散処理
maebashi
@
IIJ
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
1
- 3. 本日の話
• Ruby
で Hadoop
MapReduce
みたいなものを
つくりました
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
3
- 4. 本日の話
これ
Hadoop
http://www.gluster.org/
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
4
- 5. 分散処理フレームワーク
MapReduce
とは?
mapとreduceの2段階にわけてデータ処理
①
map
–
抽出・変換
②
reduce
–
集約・集計
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
5
- 6. 分散ファイルシステム
GlusterFSとは?
FUSEでマウントして
普通のファイルシステム
として見える
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
6
- 7. ファイル名に応じて分散
clientからは、ひとつの
ファイルシステムとして見える
(Distributed Volume の場合)
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
7
- 8. pmux
とは?
(1)
• pipeline
mul>plexer
に由来
• hMps://github.com/iij/pmux
• hMps://github.com/iij/pmux/wiki
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
8
- 9. pmux
とは?
(2)
• 標準入出力を介して
MapReduce
するための
コマンドラインツール(Hadoop
Streaming相当)
例:
分散grep
$ pmux --mapper="grep PATTERN" *.log
GlusterFS上にある
ファイル群
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
9
- 10. 動作原理
• 例えば次のようなコマンド
$ grep PATTERN *.log
• *.log が複数ノードに分散して配置されて
いれば、各ノードで並列に処理できる
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
10
- 14. 使用例:
ステータスコード集計
Apache
ログから特定パターンの行だけ抜き出し、
そのステータスコードを集計
$ pmux --mapper='grep PAT |cut -d" " -f 9’
--reducer='sort|uniq -c’ /mnt/glusterfs/*.log
176331 200
106360 206
809 400
21852 403
533 404
27 406
805 416
25 500
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
14
- 15. 使用例:
word
count
map.rb
#! /usr/bin/ruby -an
$F.each {|f| print "#{f}t1n"}
reduce.rb
#! /usr/bin/ruby -an
BEGIN {$c = Hash.new 0}
$c[$F[0]] += $F[1].to_i
END {$c.each {|k, v| print "#{k} #{v}n"}}
コマンドライン
$ pmux --mapper=map.rb --reducer=reduce.rb
--file=map.rb –-file=reduce.rb
/mnt/glusterfs/*.txt
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
15
- 16. コンセプト
• なるべく既にある概念を用いて分散処理
– 普通のファイルシステムに見える GlusterFS
– Unix
のパイプの思想とフィルタコマンド群
– ssh によるリモートコマンド実行
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
16
- 17. 内部構造
• シングルスレッド
• イベントドリブン方式
• Net::SSH
で ssh
セッションを同時に複数張り、
その上に MessagePack-‐RPC
を通す
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
17
- 20. ベンチマークテスト
こんなかんじのtcpdumpのlogの
14:00:00.416011
IP
21.44.60.29.hMp
>
170.73.162.175.58546:
.
3523999974:3524001422(1448)
ack
3401170238
win
1716
<nop,nop,>mestamp
1070614671
1955062367>
各ファイルで一番出現数の多かった
IPアドレスを抽出
8344ファイル、1ファイルあたり約50万行、計約40億行
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
20
- 22. 結果
pmuxを使わずに1台で実行
8時間49分6秒
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
22
- 23. 結果
pmuxを使わずに1台で実行
8時間49分6秒
pmuxを使ってノード60台で実行
1分45秒
約300倍
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
23
- 24. なぜ60台で300倍?
• 1台あたり8コアのCPUを使っているから
• ならば480倍になるのでは?
– 諸々のオーバーヘッドでそこまでいかない
– ファイルの実体位置を探すのに時間がかかる
• 今回のケース 8344ファイルで約20秒
2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
24
- 25. 2013/01
Copyright
(c)
2013
Internet
Ini>a>ve
Japan
Inc.
25