Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ruby	  によるお手軽分散処理	                     maebashi	  @	  IIJ	2013/01	        Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  J...
分散処理って?	•  複数のコンピュータノードで、同時並行的に処   理を実行してスループットを上げる	  •  分散処理といえば	  Hadoop	  2013/01	   Copyright	  (c)	  2013	  Internet	...
本日の話	•  Ruby	  で Hadoop	  MapReduce	  みたいなものを   つくりました	  2013/01	     Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  Japan...
本日の話	                                                                                    これ	            Hadoop	           ...
分散処理フレームワーク	               MapReduce	  とは?	             mapとreduceの2段階にわけてデータ処理	               ①	  map	  –	  抽出・変換	       ...
分散ファイルシステム	               GlusterFSとは?	                                                            FUSEでマウントして	           ...
ファイル名に応じて分散	                                                              clientからは、ひとつの	                                 ...
pmux	  とは?	  (1)	•  pipeline	  mul>plexer	  に由来	  •  hMps://github.com/iij/pmux	  •  hMps://github.com/iij/pmux/wiki	  201...
pmux	  とは?	  (2)	•  標準入出力を介して	  MapReduce	  するための   コマンドラインツール(Hadoop	  Streaming相当)	     例:	  分散grep	    $ pmux --mapper=...
動作原理	•  例えば次のようなコマンド	              $ grep PATTERN *.log•  *.log が複数ノードに分散して配置されて   いれば、各ノードで並列に処理できる	  2013/01	     Copyri...
ファイルがあるノードで処理を実行	2013/01	   Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  Japan	  Inc.	   11
結果を集める	2013/01	   Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  Japan	  Inc.	   12
実際はもう少し複雑	2013/01	    Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  Japan	  Inc.	   13
使用例:	  ステータスコード集計	            Apache	  ログから特定パターンの行だけ抜き出し、	              そのステータスコードを集計	$ pmux --mapper=grep PAT |cut -d" "...
使用例:	  word	  count	        map.rb	        #! /usr/bin/ruby -an        $F.each {|f| print "#{f}t1n"}        reduce.rb	    ...
コンセプト	•  なるべく既にある概念を用いて分散処理	        – 普通のファイルシステムに見える GlusterFS	        – Unix	  のパイプの思想とフィルタコマンド群	        – ssh によるリモートコマ...
内部構造	•  シングルスレッド	  •  イベントドリブン方式	  •  Net::SSH	  で ssh	  セッションを同時に複数張り、   その上に MessagePack-­‐RPC	  を通す	  2013/01	   Copyri...
独立した二つのイベントループ	2013/01	   Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  Japan	  Inc.	   18
Fiber	  で結合	2013/01	   Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  Japan	  Inc.	   19
ベンチマークテスト	                     こんなかんじのtcpdumpのlogの	            14:00:00.416011	  IP	  21.44.60.29.hMp	  >	  170.73.162.175...
実行するmapコマンド	--mapper=egrep –o "[0-9]+.[0-9]+.[0-9]+.[0-9]+"|sort|uniq -c|sort -nr|head -12013/01	        Copyright	  (c)	 ...
結果	   pmuxを使わずに1台で実行	 8時間49分6秒	2013/01	   Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  Japan	  Inc.	   22
結果	   pmuxを使わずに1台で実行	 8時間49分6秒	    pmuxを使ってノード60台で実行	 1分45秒	                              約300倍	2013/01	   Copyright	  (c)...
なぜ60台で300倍?	•  1台あたり8コアのCPUを使っているから	  •  ならば480倍になるのでは?	        – 諸々のオーバーヘッドでそこまでいかない	        – ファイルの実体位置を探すのに時間がかかる	     ...
2013/01	   Copyright	  (c)	  2013	  Internet	  Ini>a>ve	  Japan	  Inc.	   25
Upcoming SlideShare
Loading in …5
×

Rubyによるお手軽分散処理

3,888 views

Published on

Rubyによるお手軽分散処理

  1. 1. Ruby  によるお手軽分散処理 maebashi  @  IIJ 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 1
  2. 2. 分散処理って? •  複数のコンピュータノードで、同時並行的に処 理を実行してスループットを上げる  •  分散処理といえば  Hadoop  2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 2
  3. 3. 本日の話 •  Ruby  で Hadoop  MapReduce  みたいなものを つくりました  2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 3
  4. 4. 本日の話 これ Hadoop http://www.gluster.org/ 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 4
  5. 5. 分散処理フレームワーク   MapReduce  とは? mapとreduceの2段階にわけてデータ処理   ①  map  –  抽出・変換   ②  reduce  –  集約・集計 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 5
  6. 6. 分散ファイルシステム   GlusterFSとは? FUSEでマウントして   普通のファイルシステム   として見える 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 6
  7. 7. ファイル名に応じて分散 clientからは、ひとつの   ファイルシステムとして見える (Distributed Volume の場合) 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 7
  8. 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. 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. 10. 動作原理 •  例えば次のようなコマンド   $ grep PATTERN *.log•  *.log が複数ノードに分散して配置されて いれば、各ノードで並列に処理できる  2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 10
  11. 11. ファイルがあるノードで処理を実行 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 11
  12. 12. 結果を集める 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 12
  13. 13. 実際はもう少し複雑 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 13
  14. 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 5002013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 14
  15. 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/*.txt2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 15
  16. 16. コンセプト •  なるべく既にある概念を用いて分散処理   – 普通のファイルシステムに見える GlusterFS   – Unix  のパイプの思想とフィルタコマンド群   – ssh によるリモートコマンド実行  2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 16
  17. 17. 内部構造 •  シングルスレッド  •  イベントドリブン方式  •  Net::SSH  で ssh  セッションを同時に複数張り、 その上に MessagePack-­‐RPC  を通す  2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 17
  18. 18. 独立した二つのイベントループ 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 18
  19. 19. Fiber  で結合 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 19
  20. 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
  21. 21. 実行するmapコマンド --mapper=egrep –o "[0-9]+.[0-9]+.[0-9]+.[0-9]+"|sort|uniq -c|sort -nr|head -12013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 21
  22. 22. 結果 pmuxを使わずに1台で実行 8時間49分6秒 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 22
  23. 23. 結果 pmuxを使わずに1台で実行 8時間49分6秒 pmuxを使ってノード60台で実行 1分45秒 約300倍 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 23
  24. 24. なぜ60台で300倍? •  1台あたり8コアのCPUを使っているから  •  ならば480倍になるのでは?   – 諸々のオーバーヘッドでそこまでいかない   – ファイルの実体位置を探すのに時間がかかる   •  今回のケース 8344ファイルで約20秒 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 24
  25. 25. 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 25

×