SlideShare a Scribd company logo
Ruby	
  によるお手軽分散処理	

                     maebashi	
  @	
  IIJ	




2013/01	
        Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   1
分散処理って?	
•  複数のコンピュータノードで、同時並行的に処
   理を実行してスループットを上げる	
  
•  分散処理といえば	
  Hadoop	
  




2013/01	
   Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   2
本日の話	
•  Ruby	
  で Hadoop	
  MapReduce	
  みたいなものを
   つくりました	
  




2013/01	
     Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   3
本日の話	
                                                                                    これ	

            Hadoop	




                                                                          http://www.gluster.org/	




2013/01	
   Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
                       4
分散処理フレームワーク	
  
             MapReduce	
  とは?	
             mapとreduceの2段階にわけてデータ処理	
  
             ①	
  map	
  –	
  抽出・変換	
  
             ②	
  reduce	
  –	
  集約・集計	




2013/01	
         Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   5
分散ファイルシステム	
  
             GlusterFSとは?	




                                                            FUSEでマウントして	
  
                                                            普通のファイルシステム	
  
                                                            として見える	



2013/01	
     Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   6
ファイル名に応じて分散	




                                                              clientからは、ひとつの	
  
                                                              ファイルシステムとして見える	

             (Distributed Volume の場合)	

2013/01	
       Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   7
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
pmux	
  とは?	
  (2)	
•  標準入出力を介して	
  MapReduce	
  するための
   コマンドラインツール(Hadoop	
  Streaming相当)	
  

   例:	
  分散grep	
    $ pmux --mapper="grep PATTERN" *.log


                                                                                           GlusterFS上にある	
  
                                                                                           ファイル群	

2013/01	
            Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
                   9
動作原理	
•  例えば次のようなコマンド	
  
            $ grep PATTERN *.log


•  *.log が複数ノードに分散して配置されて
   いれば、各ノードで並列に処理できる	
  




2013/01	
     Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   10
ファイルがあるノードで処理を実行	




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" " -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
使用例:	
  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
コンセプト	
•  なるべく既にある概念を用いて分散処理	
  
      – 普通のファイルシステムに見える GlusterFS	
  
      – Unix	
  のパイプの思想とフィルタコマンド群	
  
      – ssh によるリモートコマンド実行	
  




2013/01	
      Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   16
内部構造	
•  シングルスレッド	
  
•  イベントドリブン方式	
  

•  Net::SSH	
  で ssh	
  セッションを同時に複数張り、
   その上に MessagePack-­‐RPC	
  を通す	
  




2013/01	
   Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   17
独立した二つのイベントループ	




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.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
実行するmapコマンド	


--mapper='egrep –o "[0-9]+.[0-9]+.[0-9]+.[0-9]+"|
sort|uniq -c|sort -nr|head -1'




2013/01	
        Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   21
結果	

   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)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   23
なぜ60台で300倍?	
•  1台あたり8コアのCPUを使っているから	
  

•  ならば480倍になるのでは?	
  
      – 諸々のオーバーヘッドでそこまでいかない	
  
      – ファイルの実体位置を探すのに時間がかかる	
  
            •  今回のケース 8344ファイルで約20秒	




2013/01	
           Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   24
2013/01	
   Copyright	
  (c)	
  2013	
  Internet	
  Ini>a>ve	
  Japan	
  Inc.	
   25

More Related Content

What's hot (20)

PPTX
Persistence on Azure - Microsoft Azure の永続化
Takekazu Omi
 
PDF
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
y_taka_23
 
PDF
GKEで半年運用してみた
Katsutoshi Nagaoka
 
PDF
OpsWorks aws-cli#11
Yuta Shimada
 
PPT
Ruby on rails on hudsonの活用事例
Maki Toshio
 
PDF
BOSHで始めるImmutable Infrastructure
i_yudai
 
PPTX
[社内勉強会]ELBとALBと数万スパイク負荷テスト
Takahiro Moteki
 
PDF
フィードフォースと AWS と私
a know
 
PDF
Docker, Kubernetes and OpenShift v3
Emma Haruka Iwao
 
PDF
introduction of WalB
MITSUNARI Shigeo
 
PDF
AWSとGCPを使用したインフラ環境
Katsutoshi Nagaoka
 
PPTX
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編
Takekazu Omi
 
PDF
ECS-CLI in Action
Ryo Nakamaru
 
PDF
OpenStack ComputingはHyper-Convergedの夢を見るのか?
Naoto Gohko
 
PPTX
分散ストレージ技術Cephの最新情報
Emma Haruka Iwao
 
PDF
kubernetes(GKE)環境におけるdatadog利用
Koichi HARUNA
 
PDF
OpenStack Object Storage; Usage
irix_jp
 
PDF
Aws privte20110406 arai
awsadovantageseminar
 
PDF
OSC2012 Nagoya - OpenStack - Storage System; Overview
irix_jp
 
PDF
OpenStack Object Storage; Overview
irix_jp
 
Persistence on Azure - Microsoft Azure の永続化
Takekazu Omi
 
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
y_taka_23
 
GKEで半年運用してみた
Katsutoshi Nagaoka
 
OpsWorks aws-cli#11
Yuta Shimada
 
Ruby on rails on hudsonの活用事例
Maki Toshio
 
BOSHで始めるImmutable Infrastructure
i_yudai
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
Takahiro Moteki
 
フィードフォースと AWS と私
a know
 
Docker, Kubernetes and OpenShift v3
Emma Haruka Iwao
 
introduction of WalB
MITSUNARI Shigeo
 
AWSとGCPを使用したインフラ環境
Katsutoshi Nagaoka
 
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編
Takekazu Omi
 
ECS-CLI in Action
Ryo Nakamaru
 
OpenStack ComputingはHyper-Convergedの夢を見るのか?
Naoto Gohko
 
分散ストレージ技術Cephの最新情報
Emma Haruka Iwao
 
kubernetes(GKE)環境におけるdatadog利用
Koichi HARUNA
 
OpenStack Object Storage; Usage
irix_jp
 
Aws privte20110406 arai
awsadovantageseminar
 
OSC2012 Nagoya - OpenStack - Storage System; Overview
irix_jp
 
OpenStack Object Storage; Overview
irix_jp
 

Similar to Rubyによるお手軽分散処理 (20)

PDF
MapReduce解説
Shunsuke Aihara
 
PDF
WDD2012_SC-004
Kuninobu SaSaki
 
PDF
20130927 adstir emr
AdStir
 
PDF
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
Developers Summit
 
PPTX
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Kenta Suzuki
 
PDF
Jenkinsとhadoopを利用した継続的データ解析環境の構築
VOYAGE GROUP
 
PPT
Hadoop ~Yahoo! JAPANの活用について~
Yahoo!デベロッパーネットワーク
 
PDF
OSC2012 OSC.DB Hadoop
Shinichi YAMASHITA
 
PDF
LXC入門 - Osc2011 nagoya
Masahide Yamamoto
 
PDF
Hadoop - OSC2010 Tokyo/Spring
Shinichi YAMASHITA
 
PDF
ソーシャルゲームのEMR活用事例
知教 本間
 
PDF
Hadoopを用いた大規模ログ解析
shuichi iida
 
PDF
私がMuninに恋する理由 - インフラエンジニアでも監視がしたい! -
Masahito Zembutsu
 
PDF
Muninではじめる実践★リソース監視 -俺のサーバがこんなに重いはずがない、を乗り切るために-
Masahito Zembutsu
 
PDF
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
Developers Summit
 
PDF
Hadoop事始め
You&I
 
PDF
OSC2011 Tokyo/Spring Hadoop入門
Shinichi YAMASHITA
 
PDF
Guide to Cassandra for Production Deployments
smdkk
 
PDF
第12回CloudStackユーザ会_ApacheCloudStack最新情報
Midori Oge
 
PDF
TokyoWebminig カジュアルなHadoop
Teruo Kawasaki
 
MapReduce解説
Shunsuke Aihara
 
WDD2012_SC-004
Kuninobu SaSaki
 
20130927 adstir emr
AdStir
 
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
Developers Summit
 
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Kenta Suzuki
 
Jenkinsとhadoopを利用した継続的データ解析環境の構築
VOYAGE GROUP
 
Hadoop ~Yahoo! JAPANの活用について~
Yahoo!デベロッパーネットワーク
 
OSC2012 OSC.DB Hadoop
Shinichi YAMASHITA
 
LXC入門 - Osc2011 nagoya
Masahide Yamamoto
 
Hadoop - OSC2010 Tokyo/Spring
Shinichi YAMASHITA
 
ソーシャルゲームのEMR活用事例
知教 本間
 
Hadoopを用いた大規模ログ解析
shuichi iida
 
私がMuninに恋する理由 - インフラエンジニアでも監視がしたい! -
Masahito Zembutsu
 
Muninではじめる実践★リソース監視 -俺のサーバがこんなに重いはずがない、を乗り切るために-
Masahito Zembutsu
 
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
Developers Summit
 
Hadoop事始め
You&I
 
OSC2011 Tokyo/Spring Hadoop入門
Shinichi YAMASHITA
 
Guide to Cassandra for Production Deployments
smdkk
 
第12回CloudStackユーザ会_ApacheCloudStack最新情報
Midori Oge
 
TokyoWebminig カジュアルなHadoop
Teruo Kawasaki
 
Ad

Rubyによるお手軽分散処理

  • 1. Ruby  によるお手軽分散処理 maebashi  @  IIJ 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 1
  • 2. 分散処理って? •  複数のコンピュータノードで、同時並行的に処 理を実行してスループットを上げる   •  分散処理といえば  Hadoop   2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 2
  • 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
  • 11. ファイルがあるノードで処理を実行 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 11
  • 12. 結果を集める 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 12
  • 13. 実際はもう少し複雑 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 13
  • 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
  • 18. 独立した二つのイベントループ 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 18
  • 19. Fiber  で結合 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 19
  • 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. 実行するmapコマンド --mapper='egrep –o "[0-9]+.[0-9]+.[0-9]+.[0-9]+"| sort|uniq -c|sort -nr|head -1' 2013/01 Copyright  (c)  2013  Internet  Ini>a>ve  Japan  Inc. 21
  • 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