Fluentdでログを集めてGlusterFS
     に保存してMapReduceで集計	
                maebashi	
  @	
  IIJ	




2012/11	
   Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   1
キーワード	

              Fluentd
             GlusterFS
            MapReduce

2012/11	
    Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   2
GlusterFS とは?	




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




2012/11	
    Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   3
特別なプラグインなしでログ保存可能	




2012/11	
   Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   4
ファイル名に応じて分散	




                                                     time_slice_format %Y%m%d	




2012/11	
     Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   5
ファイル群を分散処理したい	




                                               分散して格納されているので	
  
                                               各ノードでコマンドを適用して	
  
                                               結果を集めればよい	
  
                                               → というツールを作った	
2012/11	
       Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   6
pmux	
•  pipeline	
  mulCplexer	
  に由来	
  
•  標準入出力を介してMapReduce	
  するためのコ
   マンドラインツール	
  
    $ pmux --mapper="grep PATTERN" /glusterfs/*.log!



•  ファイルベース(chunkに分割しない)	
  
      –  GlusterFSのdistributed,	
  replicated	
  volumeに対応	
  
•  hKps://github.com/iij/pmux	
  
2012/11	
            Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   7
似ているもの	

        • Hadoop	
  Streaming	
        • GNU	
  Parallel	
  
        • GXP	
  



2012/11	
       Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   8
インストール	




                                                                           pmuxコマンドは	
  
                                                                           ここで実行	

2012/11	
   Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
            9
仕組み	

今回は mapper	
  のみを使った場合を説明します	
  
  (reducerが絡むと、もうちょっと複雑)	
  




2012/11	
   Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   10
1.対象file群の実体の位置を確認	




                                                                           pmuxコマンドは	
  
                                                                           ここで実行	

2012/11	
   Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
            11
2.	
  sshで各ノードのpmuxを起動	




2012/11	
    Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   12
3.	
  ノードにタスクを分配して実行	




2012/11	
   Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   13
4.	
  結果を集める	




                                            resultが巨大な場合はscpを使う	



2012/11	
    Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   14
ベンチマークテスト	
                          こんなかんじのログの	
      2012-­‐11-­‐01T23:50:22+09:00      	
  apache.access 	
  {"host":	
  
      "192.168.16.153","user":"-­‐","method":"GET","path":"/0123456789	
  
      10000","code":"200","size":"1513395608","referer":"-­‐","agent":"-­‐",	
  
      "inbyte":"162","outbyte":"233396987"}	
  


                   size,	
  inbyte,	
  outbyteを集計する	


                      665ファイル、1億6300万行	


2012/11	
                   Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   15
•  pmux	
  使わない場合	
  
        $ ./sum.rb /glusterfs/*.log.gz!



•  pmux	
  使う場合	
        $ pmux --file=sum.rb --mapper=sum.rb !
        /glusterfs/*.log.gz | ./sum.rb!




2012/11	
            Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   16
•  pmux	
  使わない場合	
                                       94分55秒	
        $ ./sum.rb /glusterfs/*.log.gz!



•  pmux	
  使う場合	
        $ pmux --file=sum.rb --mapper=sum.rb !
        /glusterfs/*.log.gz | ./sum.rb!




2012/11	
            Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   17
•  pmux	
  使わない場合	
                                       94分55秒	
        $ ./sum.rb /glusterfs/*.log.gz!



•  pmux	
  使う場合 ノード40台で	
 35秒	
        $ pmux --file=sum.rb --mapper=sum.rb !
        /glusterfs/*.log.gz | ./sum.rb!



                                          162倍	

2012/11	
            Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   18
なぜ40台しかないのに162倍?	
•  1台あたり8コアのCPUを使っているから	
  

•  ならば320倍になるのでは?	
  
      –  諸々のオーバーヘッドでそこまでいかない	
  
      –  対象ファイルのサイズにバラツキがあり均等に分
         かれない	




2012/11	
    Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   19
今後	
•  テキストファイルじゃない形式で保存すれば
   もっと効率良くなるかも	




2012/11	
   Copyright	
  (c)	
  2012	
  Internet	
  IniCaCve	
  Japan	
  Inc.	
   20

Fluentdでログを集めてGlusterFSに保存してMapReduceで集計

  • 1.
    Fluentdでログを集めてGlusterFS に保存してMapReduceで集計 maebashi  @  IIJ 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 1
  • 2.
    キーワード Fluentd GlusterFS MapReduce 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 2
  • 3.
    GlusterFS とは? FUSEでマウントして   普通のファイルシステム   として見える 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 3
  • 4.
    特別なプラグインなしでログ保存可能 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 4
  • 5.
    ファイル名に応じて分散 time_slice_format %Y%m%d 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 5
  • 6.
    ファイル群を分散処理したい 分散して格納されているので   各ノードでコマンドを適用して   結果を集めればよい   → というツールを作った 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 6
  • 7.
    pmux •  pipeline  mulCplexer  に由来   •  標準入出力を介してMapReduce  するためのコ マンドラインツール   $ pmux --mapper="grep PATTERN" /glusterfs/*.log! •  ファイルベース(chunkに分割しない)   –  GlusterFSのdistributed,  replicated  volumeに対応   •  hKps://github.com/iij/pmux   2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 7
  • 8.
    似ているもの • Hadoop  Streaming • GNU  Parallel   • GXP   2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 8
  • 9.
    インストール pmuxコマンドは   ここで実行 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 9
  • 10.
    仕組み 今回は mapper  のみを使った場合を説明します   (reducerが絡むと、もうちょっと複雑)   2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 10
  • 11.
    1.対象file群の実体の位置を確認 pmuxコマンドは   ここで実行 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 11
  • 12.
    2.  sshで各ノードのpmuxを起動 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 12
  • 13.
    3.  ノードにタスクを分配して実行 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 13
  • 14.
    4.  結果を集める resultが巨大な場合はscpを使う 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 14
  • 15.
    ベンチマークテスト こんなかんじのログの 2012-­‐11-­‐01T23:50:22+09:00  apache.access  {"host":   "192.168.16.153","user":"-­‐","method":"GET","path":"/0123456789   10000","code":"200","size":"1513395608","referer":"-­‐","agent":"-­‐",   "inbyte":"162","outbyte":"233396987"}   size,  inbyte,  outbyteを集計する 665ファイル、1億6300万行 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 15
  • 16.
    •  pmux  使わない場合   $ ./sum.rb /glusterfs/*.log.gz! •  pmux  使う場合 $ pmux --file=sum.rb --mapper=sum.rb ! /glusterfs/*.log.gz | ./sum.rb! 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 16
  • 17.
    •  pmux  使わない場合   94分55秒 $ ./sum.rb /glusterfs/*.log.gz! •  pmux  使う場合 $ pmux --file=sum.rb --mapper=sum.rb ! /glusterfs/*.log.gz | ./sum.rb! 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 17
  • 18.
    •  pmux  使わない場合   94分55秒 $ ./sum.rb /glusterfs/*.log.gz! •  pmux  使う場合 ノード40台で 35秒 $ pmux --file=sum.rb --mapper=sum.rb ! /glusterfs/*.log.gz | ./sum.rb! 162倍 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 18
  • 19.
    なぜ40台しかないのに162倍? •  1台あたり8コアのCPUを使っているから   • ならば320倍になるのでは?   –  諸々のオーバーヘッドでそこまでいかない   –  対象ファイルのサイズにバラツキがあり均等に分 かれない 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 19
  • 20.
    今後 •  テキストファイルじゃない形式で保存すれば もっと効率良くなるかも 2012/11 Copyright  (c)  2012  Internet  IniCaCve  Japan  Inc. 20