SlideShare a Scribd company logo
1 of 45
Introduction to MapReduce
              and
    all that jazz in Gumi

       Shunsuke AIHARA
Overview
• What is MapReduce?
 •   Product point of view

 •   Computational Model point of view

 •   Framework point of view

• Example tasks
 •   Simple experiments in Gumi using amazon
     elastic mapreduce

• Future work
Goal of this presentation
• MapReduceのどこがイケてたのか他と少
  し違う視点から説明

• MapReduce型分散処理は使うだけなら
  簡単だと言うことを理解していただく

 • 基本の考えはとても単純
 • 難しい部分は隠 されている
What is MapReduce?
MapReduce as a Product
• googleの並列分散処理環境
 • 分散ファイルシステムGFS
 • 並列処理システムMapReduce
• Hadoop(+HDFS)はそのクローン
• ここからは, MapReduceとHadoopはほぼ
 同じものとして扱う
MapReduce as a
Computational Model
• MapReduceは並列計算のパラダイムが元
 • 並列化しやすい処理パターンを利用
• 並列化しやすい処理?
 • list処理のmap関数とreduce関数
 • 副作用の無い関数型プログラミング
 並列プログラミングのデザインパターン
   (スケルトン並列プログラミング)
map
• 関数を受け取ってそれをリストの各要
  素に(独立に)適用する高階関数
 map f [x1 , x2 , ..., xn ] = [f (x1 ), f (x2 ), ..., f (xn )]


• (例)リストの要素をそれぞれ二倍する
 • map(lambda x: x*2 , [1,2,3,4,5])
                       関数 f(x)              リスト
reduce
• リストと,その要素を結合する二項演算
  子を受け取って一つの結果を返す関数
  reduce   [x1 , x2 , ..., xn ] = x1   x2 , ..., xn

• (例)リストの要素の値を足し合わせる
 • reduce(lambda x,y: x+y),[2,4,6,8,10])
                二項演算                        リスト
  分散処理の世界では処理によってここが二項演算とは限らない
map+reduce
  • mapやreduceに渡すデータ・処理がそれ
   ぞれ独立ならば並列化可能
    •   処理の外部への副作用が無いことが条件
                     二項演算ならn/log2(n)倍
                         に高速化




n倍に高速化     map処理   reduce処理
Simple distributed
     map+reduce
• 処理したい巨大な(多数の)ファイルに
 map+reduceしたい

• 分散シェルで複数サーバにタスク分散
 • MPIは難しい/大規模データに向かない
 • 分散シェルはシェルコマンドを他の
  サーバに投げる/負荷分散も自動化
GXP Grid and Cluster Shell
 • 東京大学田浦研作成の分散シェル
 • pythonによる実装
  • クラスタサーバに対してssh接続を行
   い接続先サーバ上でコマンドを実行
  • GXP ep: 分散シェル+タスクスケジューラ
  • GXP make: 分散Make(gnu Makeの分散オプ
            ションを利用)
self-made distributed map
       • クラスタサーバとNFSで構築
        • 分散シェル(GXP ep)でタスクを分散
                                 予め細切れに
                                したデータを格納
   タスクリスト              NFSサーバ       infile1
map inflie1 > outfile1                infile2
map inflie2 > outfile2                infile3
map inflie3 > outfile3                  ...
map inflie4 > outfile4
         ...
                         Disk I/Oが一点に集中
 GXPが空いてるサーバに          ファイルの配置・転送も必要
  タスクを自動で振り分け           前処理(分割作業)が必要
self-made distributed reduce
 • map時と構成はほぼ同じ
  • reduce処理も自分で記述(GXPで分散)
          タスクに依存があればGXP makeで
                                             中間ファイル
   タスクリスト(make)
                                              を全て保存
tmp1: map1 map2 ...
      reduce1 map1 map2...
              ....
out1: tmp1 tmp2 ...
      reduce2 tmp1 tmp2...
               ...
result: out1 out2 ...                    Disk I/Oが一点に集中
       reduce3 out1 out2 ...
                                         ファイル転送が必要
                        複雑なreduce処理を記述   大量の中間ファイル
Bottleneck of distributed
  processing for massive data
 • タスクスケジューラは優秀でも...
 • ファイルの配置の問題
   •   ファイルの分割/分散配置を自動化したい
       •   Disk I/Oを分散化

 • 計算の局所性の問題
   •   配置場所と計算場所は自動的に同じ場所で
       •   ファイル転送を最小限に/タスクを自動生成
並列計算分野(GXP)と大規模データ解析分野(MapReduce)のフォーカスの違い
From map&reduce to
     MapReduce
• MapReduceはmap+reduceを効率的に並列
 分散化するフレームワーク

 • 効率的な分散処理への工夫と制約
 • 面倒な手続きの隠
• ただし、解きたい問題をMapReduceに合
 わせて再設計する必要あり
MapReduce as a
            Framework
     • ファイルの分散配置の実現
      • MapReduceではファイルを分散ファイ
        ルシステムに配置(GFS,HDFS)
  マスターノード
(ファイルシステムを管理
                        ファイルは64MBごとに
                        分割されて分散配置


                        各ブロックは自動で
                        多重化(負荷分散/高可用性)
MapReduce as a
    Framework
• 計算の局所性の実現
 • map処理は行レベルで独立
 • データ実体のある場所でmapが起動
               map

                           map

   マスターノード           map

               map

 実体のある場所に                  map

mapタスクをばら撒く          map
MapReduce as a
     Framework
 • map処理の概要
  • 一行ごと独立の処理
  • 出力は keyとvalueの複数のペア
アクセスログ等
                               key1    val1
                               key2    val2
              mapper           key3    val3
                               key4    val4
                               .....

           行ごとの単語と頻度の対
          アクセス日とユーザの対 etc...
MapReduce as a
         Framework
• 計算の局所性の実現/処理の自動化
 • reduce処理の前にsortとshuffle処理
 • 同じkeyのデータは全て同じreducerに

mapper


  .
  .
  .
MapReduce as a
          Framework
 • 計算の局所性の実現/処理の自動化
  • reduce処理の前にsortとshuffle処理
  • 同じkeyのデータは全て同じreducerに
出力をkeyを元に
 R個に分割

 mapper
               .
               .
   .           .
   .
   .
MapReduce as a
          Framework
 • 計算の局所性の実現/処理の自動化
  • reduce処理の前にsortとshuffle処理
  • 同じkeyのデータは全て同じreducerに
出力をkeyを元に
 R個に分割

 mapper
               .
               .
   .           .
   .
   .
MapReduce as a
          Framework
 • 計算の局所性の実現/処理の自動化
  • reduce処理の前にsortとshuffle処理
  • 同じkeyのデータは全て同じreducerに
出力をkeyを元に             各分割毎にsortして
 R個に分割                reducerに割り当て
 mapper
               .
               .
   .           .
   .
   .
MapReduce as a
          Framework
 • 計算の局所性の実現/処理の自動化
  • reduce処理の前にsortとshuffle処理
  • 同じkeyのデータは全て同じreducerに
出力をkeyを元に                      各分割毎にsortして
 R個に分割                         reducerに割り当て
 mapper
                      .
          reduceはkeyあたり1回のみの実行で可能
                      .
   .                  .
   .   他のmap処理と独立にreducerに投げることが可能
   .
MapReduce as a
    Framework
• MapReduceはkey-val pairが処理の中心
 • 複雑な処理は一回のMapReduceでは難
• MapReduceで複雑な処理
 • MapReduceを多段化して対応
 • MapReduceは単純だが汎用的
MapReduce as a
  Framework
• MapReduceの良さ
 • 分散ファイルシステムとの組み合わせ
  によるI/O分散とmap処理の局所化

• shuffle処理の導入によるreduceの簡易
  化・局所化・効率的な並列化

• 多段化により複雑な処理にも対応
However...
• Disk I/Oが少ない or MapReduceに落とし
 にくい場合はGXPが便利

• MapReduceを使おうとする前に...
 • NFSも最近は早い(EMCやNetApp)
 • 数十G程度ならメモリに乗る
   • アルゴリズムを見直す
   • C++やOCamlで書く, sed & awkで処理
Example tasks
simple experiment
 using amazon EMR
• gumiでもログ解析を分散処理化
 • 過去全てのデータに対し新しい処理
• 抽出するデータ
 • 初回アクセス日からの継続数
 • ユーザ間インタラクションレート
Basic structure of Socialgame

             ユーザ継続率
招待された場合は                   インタラクションが
 辞めづらい                     あればやめられない




            招待後にも交流が出来れば       ユーザ間
  招待        インタラクションに繋がる     インタラクション
           全てのパラメータが依存している
  全てに報酬とゲーム的必然性を設定することで最適化が行われる
Experiment environment
• 全ゲームサーバのapacheログをamazon
 S3ストレージに保存
 • HadoopのHDFS相当
 • ログにはアクセスユーザ識別子を付与
• amazon elastic mapreduceを用いて分散処
 理を行う
 • EC2インスタンス+Hadoopの構成
Experiment environment
• 全ゲームサーバのapacheログをamazon
 S3ストレージに保存          但しMapReduceが動く場所と


 • HadoopのHDFS相当
                    ファイルを保存している場所は別


 • ログにはアクセスユーザ識別子を付与
• amazon elastic mapreduceを用いて分散処
 理を行う
 • EC2インスタンス+Hadoopの構成
Experiment environment
• mapperやreducerもS3上に配置
 •   hadoop streaming apiを利用しpythonで作成

• AWS Management Consoleでタスク実行



                         ※コマンドラインツールも有り
                         コンソールの使い方はググれ
Persistence rate




      http://ec2-75-101-191-9.compute-1.amazonaws.com/admin/sweet/


•   ユーザが初回アクセスのn日後にもアクセスし
    ているかどうかをバブルチャートで可視化
•   ゲームプレイがルーチン化しているかどうか
Calucurate persistence rate
• map処理の内容
  独自apachログパーサー
                  csvモジュール+αを利用してパース


             一行ごとに処理



   ユーザidをkey,日付のiso表記をvalとしてtab区切りで出
Calucurate persistence rate
 • reduce処理の内容
ユーザと日付セットを記憶

                   一ペアごとに処理




                      日付をsetの形で記録




          ユーザごとにアクセス日を昇順で記録
Calucurate persistence rate
  •   後処理
      •   MapReduceの結果をダウンロードして処理
      •   amChart(bubble)用のデータに加工

文字列からdateオブジェクトへ


 初回アクセス日の取り出し


初アクセス日とオフセットを
  ペアにしてカウント


 集計結果をファイル出力
Result: Persistence rate




       http://ec2-75-101-191-9.compute-1.amazonaws.com/admin/sweet/


•   縦軸が初回アクセス日

•   横軸が初回アクセス日からのオフセット

•   縦軸横軸共に減衰が少ないことが望ましい
user2user interaction rate
               Special Thanks!! Mr. Kamatani!!




•   DAUに対して,他のユーザに対してアクション
    を起こしたユーザの数を比較
•   ソーシャル性を計る指標としてaiharaが定義
    •   参考:顧客間インタラクション(国領二郎)
user2user interaction rate
• コードは少し長いので割愛
• コメント等のURLパターンを分類集計
• DAUは既存の解析済みデータを利用
• mapタスク:
 • 日付がkey
 • ユーザーidとアクションのペアがvalue
user2user interaction rate
• reduceタスク:
 • 日付ごとに処理
 • keyをアクション,valueをユーザーidの
  setとしたdictionaryを作成
 • ユーザidのセットを元に, 日-アクショ
  ン-人数の3つ組を作成
Result:user2user interaction rate
             Special Thanks!! Mr. Kamatani!!




•   インタラクションが多くなるとコミュニケー
    ションの場となり易くユーザのアクティブ率
    が上がる(コミュニティとして成立)
•   インタラクション人口が多ければ交流が活発
Conclusion
• この程度(ログ1ヶ月*6台分)なら
 • 設計: 5分
 • コーディング: 5分
 • 実行: 10分(EC2 small instance 10台)
• 過去にさかのぼって新しい解析がした
  い時でも簡単にテストが可能
Future work
• MapReduceは小さな処理には向かない
 • バッチ処理と上手く組み合わせ
 • 現在作成中
• インタラクション率はアクションを
 行った人だけではなく, 行われた人(コメ
 ントしてもらった人)も取得
 • 鎌谷さんが作成済み!!
Thank you for your attention!
Thank you for your attention!

More Related Content

What's hot

40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) hamaken
 
MapReduceプログラミング入門
MapReduceプログラミング入門MapReduceプログラミング入門
MapReduceプログラミング入門Satoshi Noto
 
Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Yoji Kiyota
 
Hadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionHadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionCloudera, Inc.
 
Hadoopことはじめ
HadoopことはじめHadoopことはじめ
Hadoopことはじめ均 津田
 
オライリーセミナー Hive入門 #oreilly0724
オライリーセミナー Hive入門  #oreilly0724オライリーセミナー Hive入門  #oreilly0724
オライリーセミナー Hive入門 #oreilly0724Cloudera Japan
 
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)Hadoop / Spark Conference Japan
 
Amazon Redshift ベンチマーク Hadoop + Hiveと比較
Amazon Redshift ベンチマーク  Hadoop + Hiveと比較 Amazon Redshift ベンチマーク  Hadoop + Hiveと比較
Amazon Redshift ベンチマーク Hadoop + Hiveと比較 FlyData Inc.
 
Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013Cloudera Japan
 
Hadoopソースコードリーディング8/MapRを使ってみた
Hadoopソースコードリーディング8/MapRを使ってみたHadoopソースコードリーディング8/MapRを使ってみた
Hadoopソースコードリーディング8/MapRを使ってみたRecruit Technologies
 
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)Hadoop / Spark Conference Japan
 
Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析MapR Technologies Japan
 
MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12
MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12
MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12MapR Technologies Japan
 
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallAmazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallShinpei Ohtani
 
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...MapR Technologies Japan
 
HBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているか
HBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているかHBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているか
HBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているかMapR Technologies Japan
 
Hadoop概要説明
Hadoop概要説明Hadoop概要説明
Hadoop概要説明Satoshi Noto
 

What's hot (20)

40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
 
MapReduceプログラミング入門
MapReduceプログラミング入門MapReduceプログラミング入門
MapReduceプログラミング入門
 
Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理
 
Hadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionHadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese Version
 
Hadoopことはじめ
HadoopことはじめHadoopことはじめ
Hadoopことはじめ
 
オライリーセミナー Hive入門 #oreilly0724
オライリーセミナー Hive入門  #oreilly0724オライリーセミナー Hive入門  #oreilly0724
オライリーセミナー Hive入門 #oreilly0724
 
MapR M7 技術概要
MapR M7 技術概要MapR M7 技術概要
MapR M7 技術概要
 
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
 
Amazon Redshift ベンチマーク Hadoop + Hiveと比較
Amazon Redshift ベンチマーク  Hadoop + Hiveと比較 Amazon Redshift ベンチマーク  Hadoop + Hiveと比較
Amazon Redshift ベンチマーク Hadoop + Hiveと比較
 
Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013
 
Hadoopソースコードリーディング8/MapRを使ってみた
Hadoopソースコードリーディング8/MapRを使ってみたHadoopソースコードリーディング8/MapRを使ってみた
Hadoopソースコードリーディング8/MapRを使ってみた
 
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
 
Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析
 
Hadoop loves H2
Hadoop loves H2Hadoop loves H2
Hadoop loves H2
 
SASとHadoopとの連携
SASとHadoopとの連携SASとHadoopとの連携
SASとHadoopとの連携
 
MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12
MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12
MapR アーキテクチャ概要 - MapR CTO Meetup 2013/11/12
 
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallAmazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
 
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
 
HBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているか
HBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているかHBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているか
HBase と Drill - 緩い型付けの SQL がいかに NoSQL に適しているか
 
Hadoop概要説明
Hadoop概要説明Hadoop概要説明
Hadoop概要説明
 

Similar to MapReduce解説

Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Sho Shimauchi
 
マイニング探検会#10
マイニング探検会#10マイニング探検会#10
マイニング探検会#10Yoji Kiyota
 
Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219Cloudera Japan
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてKazuki Ohta
 
Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoHideo Harada
 
Hadoop輪読会第6章
Hadoop輪読会第6章Hadoop輪読会第6章
Hadoop輪読会第6章Akihiro Kuwano
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
ゾウ使いへの第一歩
ゾウ使いへの第一歩ゾウ使いへの第一歩
ゾウ使いへの第一歩Fumito Ito
 
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編GoAzure
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
Hadoop splittable-lzo-compression
Hadoop splittable-lzo-compressionHadoop splittable-lzo-compression
Hadoop splittable-lzo-compressionDaiki Sato
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...Insight Technology, Inc.
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deploymentssmdkk
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなしOonishi Takaaki
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤Sotaro Kimura
 

Similar to MapReduce解説 (20)

Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
 
マイニング探検会#10
マイニング探検会#10マイニング探検会#10
マイニング探検会#10
 
MapReduce基礎
MapReduce基礎MapReduce基礎
MapReduce基礎
 
Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219Cloudera大阪セミナー 20130219
Cloudera大阪セミナー 20130219
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン Hadoopについて
 
Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 Hokkaido
 
Hadoop輪読会第6章
Hadoop輪読会第6章Hadoop輪読会第6章
Hadoop輪読会第6章
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
ゾウ使いへの第一歩
ゾウ使いへの第一歩ゾウ使いへの第一歩
ゾウ使いへの第一歩
 
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
Hadoop splittable-lzo-compression
Hadoop splittable-lzo-compressionHadoop splittable-lzo-compression
Hadoop splittable-lzo-compression
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
 
MapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知るMapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知る
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deployments
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤
 

MapReduce解説

  • 1. Introduction to MapReduce and all that jazz in Gumi Shunsuke AIHARA
  • 2. Overview • What is MapReduce? • Product point of view • Computational Model point of view • Framework point of view • Example tasks • Simple experiments in Gumi using amazon elastic mapreduce • Future work
  • 3. Goal of this presentation • MapReduceのどこがイケてたのか他と少 し違う視点から説明 • MapReduce型分散処理は使うだけなら 簡単だと言うことを理解していただく • 基本の考えはとても単純 • 難しい部分は隠 されている
  • 5. MapReduce as a Product • googleの並列分散処理環境 • 分散ファイルシステムGFS • 並列処理システムMapReduce • Hadoop(+HDFS)はそのクローン • ここからは, MapReduceとHadoopはほぼ 同じものとして扱う
  • 6. MapReduce as a Computational Model • MapReduceは並列計算のパラダイムが元 • 並列化しやすい処理パターンを利用 • 並列化しやすい処理? • list処理のmap関数とreduce関数 • 副作用の無い関数型プログラミング 並列プログラミングのデザインパターン (スケルトン並列プログラミング)
  • 7. map • 関数を受け取ってそれをリストの各要 素に(独立に)適用する高階関数 map f [x1 , x2 , ..., xn ] = [f (x1 ), f (x2 ), ..., f (xn )] • (例)リストの要素をそれぞれ二倍する • map(lambda x: x*2 , [1,2,3,4,5]) 関数 f(x) リスト
  • 8. reduce • リストと,その要素を結合する二項演算 子を受け取って一つの結果を返す関数 reduce [x1 , x2 , ..., xn ] = x1 x2 , ..., xn • (例)リストの要素の値を足し合わせる • reduce(lambda x,y: x+y),[2,4,6,8,10]) 二項演算  リスト 分散処理の世界では処理によってここが二項演算とは限らない
  • 9. map+reduce • mapやreduceに渡すデータ・処理がそれ ぞれ独立ならば並列化可能 • 処理の外部への副作用が無いことが条件 二項演算ならn/log2(n)倍 に高速化 n倍に高速化 map処理 reduce処理
  • 10. Simple distributed map+reduce • 処理したい巨大な(多数の)ファイルに map+reduceしたい • 分散シェルで複数サーバにタスク分散 • MPIは難しい/大規模データに向かない • 分散シェルはシェルコマンドを他の サーバに投げる/負荷分散も自動化
  • 11. GXP Grid and Cluster Shell • 東京大学田浦研作成の分散シェル • pythonによる実装 • クラスタサーバに対してssh接続を行 い接続先サーバ上でコマンドを実行 • GXP ep: 分散シェル+タスクスケジューラ • GXP make: 分散Make(gnu Makeの分散オプ ションを利用)
  • 12. self-made distributed map • クラスタサーバとNFSで構築 • 分散シェル(GXP ep)でタスクを分散 予め細切れに したデータを格納 タスクリスト NFSサーバ infile1 map inflie1 > outfile1 infile2 map inflie2 > outfile2 infile3 map inflie3 > outfile3 ... map inflie4 > outfile4 ... Disk I/Oが一点に集中 GXPが空いてるサーバに ファイルの配置・転送も必要 タスクを自動で振り分け 前処理(分割作業)が必要
  • 13. self-made distributed reduce • map時と構成はほぼ同じ • reduce処理も自分で記述(GXPで分散) タスクに依存があればGXP makeで 中間ファイル タスクリスト(make) を全て保存 tmp1: map1 map2 ... reduce1 map1 map2... .... out1: tmp1 tmp2 ... reduce2 tmp1 tmp2... ... result: out1 out2 ... Disk I/Oが一点に集中 reduce3 out1 out2 ... ファイル転送が必要 複雑なreduce処理を記述 大量の中間ファイル
  • 14. Bottleneck of distributed processing for massive data • タスクスケジューラは優秀でも... • ファイルの配置の問題 • ファイルの分割/分散配置を自動化したい • Disk I/Oを分散化 • 計算の局所性の問題 • 配置場所と計算場所は自動的に同じ場所で • ファイル転送を最小限に/タスクを自動生成 並列計算分野(GXP)と大規模データ解析分野(MapReduce)のフォーカスの違い
  • 15. From map&reduce to MapReduce • MapReduceはmap+reduceを効率的に並列 分散化するフレームワーク • 効率的な分散処理への工夫と制約 • 面倒な手続きの隠 • ただし、解きたい問題をMapReduceに合 わせて再設計する必要あり
  • 16. MapReduce as a Framework • ファイルの分散配置の実現 • MapReduceではファイルを分散ファイ ルシステムに配置(GFS,HDFS) マスターノード (ファイルシステムを管理 ファイルは64MBごとに 分割されて分散配置 各ブロックは自動で 多重化(負荷分散/高可用性)
  • 17. MapReduce as a Framework • 計算の局所性の実現 • map処理は行レベルで独立 • データ実体のある場所でmapが起動 map map マスターノード map map 実体のある場所に map mapタスクをばら撒く map
  • 18. MapReduce as a Framework • map処理の概要 • 一行ごと独立の処理 • 出力は keyとvalueの複数のペア アクセスログ等 key1 val1 key2 val2 mapper key3 val3 key4 val4 ..... 行ごとの単語と頻度の対 アクセス日とユーザの対 etc...
  • 19. MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに mapper . . .
  • 20. MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに 出力をkeyを元に R個に分割 mapper . . . . . .
  • 21. MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに 出力をkeyを元に R個に分割 mapper . . . . . .
  • 22. MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに 出力をkeyを元に 各分割毎にsortして R個に分割 reducerに割り当て mapper . . . . . .
  • 23. MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに 出力をkeyを元に 各分割毎にsortして R個に分割 reducerに割り当て mapper . reduceはkeyあたり1回のみの実行で可能 . . . . 他のmap処理と独立にreducerに投げることが可能 .
  • 24. MapReduce as a Framework • MapReduceはkey-val pairが処理の中心 • 複雑な処理は一回のMapReduceでは難 • MapReduceで複雑な処理 • MapReduceを多段化して対応 • MapReduceは単純だが汎用的
  • 25. MapReduce as a Framework • MapReduceの良さ • 分散ファイルシステムとの組み合わせ によるI/O分散とmap処理の局所化 • shuffle処理の導入によるreduceの簡易 化・局所化・効率的な並列化 • 多段化により複雑な処理にも対応
  • 26. However... • Disk I/Oが少ない or MapReduceに落とし にくい場合はGXPが便利 • MapReduceを使おうとする前に... • NFSも最近は早い(EMCやNetApp) • 数十G程度ならメモリに乗る • アルゴリズムを見直す • C++やOCamlで書く, sed & awkで処理
  • 28. simple experiment using amazon EMR • gumiでもログ解析を分散処理化 • 過去全てのデータに対し新しい処理 • 抽出するデータ • 初回アクセス日からの継続数 • ユーザ間インタラクションレート
  • 29. Basic structure of Socialgame ユーザ継続率 招待された場合は インタラクションが 辞めづらい あればやめられない 招待後にも交流が出来れば ユーザ間 招待 インタラクションに繋がる インタラクション 全てのパラメータが依存している 全てに報酬とゲーム的必然性を設定することで最適化が行われる
  • 30. Experiment environment • 全ゲームサーバのapacheログをamazon S3ストレージに保存 • HadoopのHDFS相当 • ログにはアクセスユーザ識別子を付与 • amazon elastic mapreduceを用いて分散処 理を行う • EC2インスタンス+Hadoopの構成
  • 31. Experiment environment • 全ゲームサーバのapacheログをamazon S3ストレージに保存 但しMapReduceが動く場所と • HadoopのHDFS相当 ファイルを保存している場所は別 • ログにはアクセスユーザ識別子を付与 • amazon elastic mapreduceを用いて分散処 理を行う • EC2インスタンス+Hadoopの構成
  • 32. Experiment environment • mapperやreducerもS3上に配置 • hadoop streaming apiを利用しpythonで作成 • AWS Management Consoleでタスク実行 ※コマンドラインツールも有り コンソールの使い方はググれ
  • 33. Persistence rate http://ec2-75-101-191-9.compute-1.amazonaws.com/admin/sweet/ • ユーザが初回アクセスのn日後にもアクセスし ているかどうかをバブルチャートで可視化 • ゲームプレイがルーチン化しているかどうか
  • 34. Calucurate persistence rate • map処理の内容 独自apachログパーサー csvモジュール+αを利用してパース 一行ごとに処理 ユーザidをkey,日付のiso表記をvalとしてtab区切りで出
  • 35. Calucurate persistence rate • reduce処理の内容 ユーザと日付セットを記憶 一ペアごとに処理 日付をsetの形で記録 ユーザごとにアクセス日を昇順で記録
  • 36. Calucurate persistence rate • 後処理 • MapReduceの結果をダウンロードして処理 • amChart(bubble)用のデータに加工 文字列からdateオブジェクトへ 初回アクセス日の取り出し 初アクセス日とオフセットを ペアにしてカウント 集計結果をファイル出力
  • 37. Result: Persistence rate http://ec2-75-101-191-9.compute-1.amazonaws.com/admin/sweet/ • 縦軸が初回アクセス日 • 横軸が初回アクセス日からのオフセット • 縦軸横軸共に減衰が少ないことが望ましい
  • 38. user2user interaction rate Special Thanks!! Mr. Kamatani!! • DAUに対して,他のユーザに対してアクション を起こしたユーザの数を比較 • ソーシャル性を計る指標としてaiharaが定義 • 参考:顧客間インタラクション(国領二郎)
  • 39. user2user interaction rate • コードは少し長いので割愛 • コメント等のURLパターンを分類集計 • DAUは既存の解析済みデータを利用 • mapタスク: • 日付がkey • ユーザーidとアクションのペアがvalue
  • 40. user2user interaction rate • reduceタスク: • 日付ごとに処理 • keyをアクション,valueをユーザーidの setとしたdictionaryを作成 • ユーザidのセットを元に, 日-アクショ ン-人数の3つ組を作成
  • 41. Result:user2user interaction rate Special Thanks!! Mr. Kamatani!! • インタラクションが多くなるとコミュニケー ションの場となり易くユーザのアクティブ率 が上がる(コミュニティとして成立) • インタラクション人口が多ければ交流が活発
  • 42. Conclusion • この程度(ログ1ヶ月*6台分)なら • 設計: 5分 • コーディング: 5分 • 実行: 10分(EC2 small instance 10台) • 過去にさかのぼって新しい解析がした い時でも簡単にテストが可能
  • 43. Future work • MapReduceは小さな処理には向かない • バッチ処理と上手く組み合わせ • 現在作成中 • インタラクション率はアクションを 行った人だけではなく, 行われた人(コメ ントしてもらった人)も取得 • 鎌谷さんが作成済み!!
  • 44. Thank you for your attention!
  • 45. Thank you for your attention!

Editor's Notes

  1. make ではマスターのノードでも対応したプロセスが走るので、同時に大量のプロセスを起動すると死ぬ ( 並列数に限界 )
  2. 分散配置による負荷分散とデータロストに対する対策 分散ファイルシステム上ではブロックサイズは 64MB だが、ファイルの実体は通常のファイルシステム上に保存されるので、実際の使用容量は通常のファイルシステムのブロックサイズで決まる (HDFS 上ではどんな小さないファイルでも 64MB ととして認識される )
  3. バイトレベルでの分割なので、行の途中で分かれていたりするかもしれない そのあたりの処理がどうなっているかは詳しくは知らない。
  4. reduce 前に shuffle が入ることによって無駄なファイルコピーが存在しなくなる
  5. なので計算の局所性は実はあんまり保たれていない。ファイル転送の無駄が大きい