SlideShare a Scribd company logo
1 of 25
Download to read offline
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

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

What's hot (20)

Persistence on Azure - Microsoft Azure の永続化
Persistence on Azure - Microsoft Azure の永続化Persistence on Azure - Microsoft Azure の永続化
Persistence on Azure - Microsoft Azure の永続化
 
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
机上の Kubernetes -  形式手法で見るコンテナオーケストレーション #NGK2016B机上の Kubernetes -  形式手法で見るコンテナオーケストレーション #NGK2016B
机上の Kubernetes - 形式手法で見るコンテナオーケストレーション #NGK2016B
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
OpsWorks aws-cli#11
OpsWorks aws-cli#11OpsWorks aws-cli#11
OpsWorks aws-cli#11
 
Ruby on rails on hudsonの活用事例
Ruby on rails on hudsonの活用事例Ruby on rails on hudsonの活用事例
Ruby on rails on hudsonの活用事例
 
BOSHで始めるImmutable Infrastructure
BOSHで始めるImmutable InfrastructureBOSHで始めるImmutable Infrastructure
BOSHで始めるImmutable Infrastructure
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
フィードフォースと AWS と私
フィードフォースと AWS と私フィードフォースと AWS と私
フィードフォースと AWS と私
 
Docker, Kubernetes and OpenShift v3
Docker, Kubernetes and OpenShift v3Docker, Kubernetes and OpenShift v3
Docker, Kubernetes and OpenShift v3
 
introduction of WalB
introduction of WalBintroduction of WalB
introduction of WalB
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
 
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編
クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編
 
ECS-CLI in Action
ECS-CLI in ActionECS-CLI in Action
ECS-CLI in Action
 
OpenStack ComputingはHyper-Convergedの夢を見るのか?
OpenStack ComputingはHyper-Convergedの夢を見るのか?OpenStack ComputingはHyper-Convergedの夢を見るのか?
OpenStack ComputingはHyper-Convergedの夢を見るのか?
 
分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報
 
kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用kubernetes(GKE)環境におけるdatadog利用
kubernetes(GKE)環境におけるdatadog利用
 
OpenStack Object Storage; Usage
OpenStack Object Storage; UsageOpenStack Object Storage; Usage
OpenStack Object Storage; Usage
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
OSC2012 Nagoya - OpenStack - Storage System; Overview
OSC2012 Nagoya - OpenStack - Storage System; OverviewOSC2012 Nagoya - OpenStack - Storage System; Overview
OSC2012 Nagoya - OpenStack - Storage System; Overview
 
OpenStack Object Storage; Overview
OpenStack Object Storage; OverviewOpenStack Object Storage; Overview
OpenStack Object Storage; Overview
 

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

S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較真治 米田
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...NTT DATA Technology & Innovation
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてKazuki Ohta
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムSatoshi Iijima
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Dai Utsui
 
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)NTT DATA OSS Professional Services
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)NTT DATA OSS Professional Services
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例fumoto kazuhiro
 
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用Developers Summit
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet ServicesNaoto Gohko
 
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)NTT DATA Technology & Innovation
 
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介Dai Utsui
 
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組みNTT DATA OSS Professional Services
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstepsmokey monkey
 

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

Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン Hadoopについて
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter)
 
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
Hadoop 2.6の最新機能(Cloudera World Tokyo 2014 LT講演資料)
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
 
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
 
GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介GMOメディア RHEV-S-事例紹介
GMOメディア RHEV-S-事例紹介
 
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
分散処理基盤Apache Hadoopの現状と、NTTデータのHadoopに対する取り組み
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstep
 

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