SlideShare a Scribd company logo
1
今さら聞けない
Hadoop!
      セントラルソフト株式会
      社
      システム開発課
      瀧澤徹

2
Hadoopは象
         のぬいぐるみ




3
4
おしまい

5
本セミナーの目的




6
セミナーの目的
       Hadoop 初心者の方に、動作概念をロールプレイを
        通して理解してもらう。




    7
アジェンダ
       データの大規模化
       Hadoop
           HDFS
               ロールプレイ HDFS 編
           MapReduce
               ロールプレイ MapReduce 編
       まとめ




    8
データの大規模化




9
世界のデジタルデータの推移
          2006年で18万ペタバイト


          2009年で80万ペタバイト



       2011年で2ゼタ(200万ペタ)バイト



     2020年で35ゼタ(3500万ペタ)バイト(予想)

10
データ量の目安




11
大量データへの対応(1)
 ハードディスク容量の増加にアクセ
 ス
 速度が追い付いていない。
    1テラバイトのデータを読み出すのに、
     転送速度が 100MB/s ならば、2時間半
     かかる。




12
大量データへの対応(2)
   転送時間を短縮する方法。
       100台のドライブに 1/100 ずつデータを保
        管。
       保管したデータを並列に取り出す。
       転送時間が2時間半から2分以内に短縮。


   ただし、次の問題が発生する。
       障害の発生する確率が増える。
       データを結合する仕組みが必要。

13
14
問題の解決
    耐障害性
        分割したデータをコピーして複数台のマシンに保存する
         ため、一部のストレージサーバが故障しても正常に稼
         働。
        デフォルトのコピー数は3。


    データ結合
        分散ファイルシステム。




    15
スケーラビリティ
    RDB とは異なり、並列台数を増やしただけ性能が向
     上

         (
         合
         計
         処
         理
         能
         力
         )




                     (マシンの台
                     数)
                    Bitqull: Data harvesting with MapReduceか
                    ら
    16
Hadoop



17
Hadoopとは
    ビッグデータを分散処理するためのミドルウェア
        ビッグデータ:大量・非定型・リアルタイム性の高い
         データ


    Google の GFS 論文と MapReduce 論文を元に作成
    Java で記述
    オープンソース




    18
分散処理のイメージ




19
Hadoop を使った事例
           Hadoop 適用前        適用後
   楽天          120時間       5時間
    (1日の購入履歴)                (1/24)
   クックパッド      7000時間
    (1年分のデータ処理)             30時間
                             (1/233)
   Yahoo     624時間
    (3年分のログ解析)
                            20分
   VISA    720時間
                             (1/1872)
    (2年分のデータ解析)

                            13分
20                           (1/3323)
Hadoop を構成する技術
 HDFS
    分散ファイルシステム
 MapReduce
    分散処理フレームワーク




21
HDFS



22
HDFS
(Hadoop Distributed File System)
    複数のストレージにファイルを分散する
        クライアントから HDFS を通してみると、一
         つの
         ファイルのように見える
    二種類のサーバで構成される
        ネームノード(NameNode)
        データノード(DataNode)



    23
ネームノード
 マスターサーバ
 分割されているデータがどのデータ
 ノードにあるか管理している。
             ここには分
                      データノード
             割データ0が
              入ってる
                      分割データ
                       split0
                         0

     ネームノー            分割データ
                       split0
      ド(マス               1
       ター)
                      分割データ
                       split0
                         2

24
データノード
 スレーブサーバ
 ブロック(分割したデータ)の読み
 書きを行う。
          データノード
           データAの
          分割データ
             0
           データBの
           分割データ
             1
           データCの
           分割データ
             3

25
ロールプレイ
       HDFS編




26
クライアント
   クライアントがファイルをネームノードに渡す。




    クライアント           ネームノード
ネームノード
   渡されたファイルをデータノードの数に分割しそれ
    ぞれに渡す。
                       データノード




    ネームノード
実践!

29
役割
 クライアント(1名)
 ネームノード(1名)
 データノード(4名)




30
クライアント
   クライアントがファイルをネームノードに渡す。




    クライアント           ネームノード
ネームノード
   渡されたファイルをデータノードの数に分割しそれ
    ぞれに渡す。
                       データノード




    ネームノード
補足
   実際はレプリケーションと呼ばれる、データのコ
    ピーを
    複数のノードへの保存が行われる。(デフォルトは3
                       データノード
    か所)

    ネームノード
MapReduce




34
MapReduceとは
    大量のデータを分散処理するフレームワーク。
    各ノードが自身の持つデータを処理する。


    3種類のフェーズから構成される。
        Map
        Shuffle & Sort
        Reduce




    35
ワードカウントとは
    ある文書中にある単語数をカウントし、単語ごとに
     使われた回数を結果として出力する。




    36
ワードカウントの MapReduce の流れ

     ローカルファイル




     ローカルファイル




     ローカルファイル   Shuffle & Sort 処理




     ローカルファイル




37
Map
    入力データの中で自身のノードが持っているデータ
     を
     処理し、中間データとして出力する。
    入出力の形式は key と value のペア。

         入力デー   <key A , value B>
         タ

          処理          Map


         中間デー   <key C , value D>
         タ



    38
ワードカウントの Map(入力データ)
     ファイルの1行を読み込んで Map の入力にする
        key :行の先頭文字がファイルの開始から何文字目かの
         数値
         (バイトオフセット)
       入力ファイル(実ファ
         value :1行の内容そのまま
         入力ファイル(HDFS      入力データ(<key ,
   イル)                  value>)
    上)
ノード1 dog cat cat         <0 , “dog cat cat” >
    dog cat cat

ノード2 bird dog
      bird dog          <12 ,    “bird dog”   >
     dog dog dog
ノード3 cat dog dog
      dog               <21 , “dog dog dog”>
          cat dog
                         <33 ,     “cat”      >
     cat
ノード4
     cat dog             <37 ,   “cat dog”    >

     39
ワードカウントの Map(処理・中間データ)
    入力の value を単語に分割して、それを中間データ
     の key 、数字の1を value にする

    ノード4上の処理
         入力データ                    中間データ
         (<key , value>)          (<key , value>)
                                       < “cat” , 1 >
          <33 ,     “cat”     >
                                        < “cat” , 1 >
          <37 ,   “cat dog”   >
                                       < “dog” , 1 >




    40
ワードカウントの Map(全体の流れ)
      ノード4上の処理

                                         < “cat” , 1 >
           <33 ,   “cat” >    Map 処
cat                                      < “cat” , 1 >
cat dog      <37 , “cat        理
               dog”>                    < “dog” , 1 >




  ファイルからのデータの読み込み
                             1行を単語へ分割   中間データの出力




      41
Shuffle & Sort
    Map が終了すると、生成された中間データを
     Reduce に渡す前に Shuffle & Sort が行われる。
    Shuffle & Sort ではデータの key に基づいて、ソー
     トとvalue の集約、 ハッシュを用いて Reduce への
     データの割り振りを行う。

         Map
                               Reduce
         Map
                   Shuffle &
                     Sort
         Map
                               Reduce
         Map

    42
ワードカウントの Shuffle & Sort
 Map の出力を同じ key の value を一つに集約し、 key
  の順にソート、ハッシュでどちらの Reduce へ渡すのか
  決める
ノード1の Map 出 ノード3の Map 出     Reduce1 の入力
力                   力
    < “dog” , 1 >       < “dog” , 1 >
                                        < “dog” , {1,1,1,1,1,1} >
    < “cat” , 1 >       < “dog” , 1 >

    < “cat” , 1 >       < “dog” , 1 >

ノード2の Map 出         ノード4の Map 出            Reduce2 の入力
力                   力
                      < “cat” , 1 >
  < “bird” , 1 >                         < “bird” ,      {1}   >
                        < “cat” , 1 >
                                        < “cat” ,     {1,1,1,1} >
    < “dog” , 1 >
                        < “dog” , 1 >
     43
Reduce
    Shuffle & Sort で処理されたデータを受け取り、処理
     を行って HDFS 上に結果を書きだす。
    入出力の形式は key と value のペア。
                                              B は同じ key A の
                                           value (B1,B2,…) の集ま
                                                     り
         処理されたデータ     <key A , values B>


           処理               Reduce


           出力       key C   value D




    44
ワードカウントの Reduce (処理・出力)
    入力の value にある1の数を数えて、ファイルに key
     と
     ペアで出力する。

    Reduce2 の処理
                     入力              出力(HDFS 上)

         < “bird” ,       {1}   >   bird   1
                                    cat    4
         < “cat” ,    {1,1,1,1} >




    45
(再掲)ワードカウントの MapReduce の流れ

     ローカルファイル




     ローカルファイル




     ローカルファイル   Shuffle & Sort 処理




     ローカルファイル




46
ロールプレイ
MapReduce編
クライアント
   ネームノードにワードカウントを命令する




    クライアント           ネームノード
ネームノード
   データノードに処理を指示する。
                      データノード




     ネームノード
Map
   入力データの単語ごとに、それぞれの単語をkeyに
    して、valueに1とする。
   keyごとにソートしまとめる。
   ネームノードにまとめたデータを渡す。
                         中間データ
    入力データ                <“bird”,1>   ネームノード
                         <“cat”,1>
    dog cat              <“cat”,1>
    dog bird cat   Map
    dog                  <“dog”,1>
         …




                         <“dog”,1>
                         <“dog”,1>
ネームノード
    中間データをマージします。
    マージしたデータを二つを分ける。
    Reduceに渡す。
                                                       Reduce
    中間データ
    <“bird”,1>
     <“cat”,1>                      <“dog” ,{1,1,1}>
                  <“bird” , {1}>
     <“cat”,1>
                  <“cat” ,{1,1}>
    <“dog”,1>    <“dog” ,{1,1,1}>
                                     <“bird” , {1}>
    <“dog”,1>                        <“cat” ,{1,1}>
    <“dog”,1>


    51
Reduce
   単語ごとにまとめられたvalueを足して出力する。
   ネームノードに渡す。

    Reduce
                            ネームノード
             <“dog” ,3>




              <“cat” ,2>
             <“bird” , 1>
ネームノード
    出力結果をデータノードにそれぞれ渡す。



                      データノード

         ネームノード




    53
クライント
    ネームノードに対し、結果のファイルを要求する。




         クライアント       ネームノード




    54
ネームノード
    出力結果のファイルを渡すように指示する。




         ネームノード       データノード




    55
データノード
    ネームノードにファイルを渡す。




データノード                 ネームノード




    56
ネームノード
    ファイルをクライアントに渡す。




         ネームノード        クライアント




    57
クライアント
    受け取ったファイルの確認をする。




                        出力ファイ
         クライアント           ル
                  確認
                        bird       1
                        cat        2
                        dog        3




                               …
    58
役割
 クライアント(1名)
 ネームノード(1名)
 Map(4名)
 Reduce(2名)




59
クライアント
   ネームノードにワードカウントを命令する




    クライアント           ネームノード
ネームノード
   データノードに処理を指示する。
                      データノード




     ネームノード
Map
   入力データの単語ごとに、それぞれの単語をkeyに
    して、valueに1とする。
   keyごとにソートしまとめる。
   ネームノードにまとめたデータを渡す。
                         中間データ
    入力データ                <“bird”,1>   ネームノード
                         <“cat”,1>
    dog cat              <“cat”,1>
    dog bird cat   Map
    dog                  <“dog”,1>
         …




                         <“dog”,1>
                         <“dog”,1>
ネームノード
    中間データをマージします。
    マージしたデータを二つを分ける。
    Reduceに渡す。
                                                       Reduce
    中間データ
    <“bird”,1>
     <“cat”,1>                      <“dog” ,{1,1,1}>
                  <“bird” , {1}>
     <“cat”,1>
                  <“cat” ,{1,1}>
    <“dog”,1>    <“dog” ,{1,1,1}>
                                     <“bird” , {1}>
    <“dog”,1>                        <“cat” ,{1,1}>
    <“dog”,1>


    63
Reduce
   単語ごとにまとめられたvalueを足して出力する。
   ネームノードに渡す。

    Reduce
                            ネームノード
             <“dog” ,3>




              <“cat” ,2>
             <“bird” , 1>
ネームノード
    出力結果をデータノードにそれぞれ渡す。



                      データノード

         ネームノード




    65
クライント
    ネームノードに対し、結果のファイルを要求する。




         クライアント       ネームノード




    66
ネームノード
    出力結果のファイルを渡すように指示する。




         ネームノード       データノード




    67
データノード
    ネームノードにファイルを渡す。




データノード                 ネームノード




    68
ネームノード
    ファイルをクライアントに渡す。




         ネームノード        クライアント




    69
クライアント
    受け取ったファイルの確認をする。




                        出力ファイ
         クライアント           ル
                  確認
                        bird       1
                        cat        2
                        dog        3




                               …
    70
(再掲)ワードカウントの MapReduce の流れ

     ローカルファイル




     ローカルファイル




     ローカルファイル   Shuffle & Sort 処理




     ローカルファイル




71
まとめ




72
まとめ
    Hadoop はデータの分散処理システムであり、
     HDFS と MapReduce で構成される

    HDFS はデータファイルを分散管理するシステムで
     あり以下のような構成である
        分割したデータの保存場所を管理する「ネームノード」
        実際にデータを保存する「データノード」

    MapReduce は以下の3つのフェーズで構成される
        入力データの加工を行う「Map」
        データの整理と分配を行う「Shuffle & Sort」
        まとめられたデータに対して処理を行う「Reduce」

    73
今後の発表ネタ
    MapReduce 関連
        アルゴリズム
            転置インデックス      ・・・基本的な MapReduce
            TF-IDF    ・・・複数回の MapReduce
            k-means 法 ・・・条件による MapReduce の分岐
        MapReduce プログラミング手法
            複数ファイルのデータのマージ
            パラメータ引渡し
            etc


    Hadoop 関連のシステム(エコシステム)
        HBase
        Hive

    74

More Related Content

ODP
Hadoop for programmer
PDF
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
PDF
Hadoopことはじめ
PPT
Amazon Redshift ベンチマーク Hadoop + Hiveと比較
PDF
Hadoopデータプラットフォーム #cwt2013
PDF
Hadoopによる大規模分散データ処理
PPT
Hadoop loves H2
PPTX
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
Hadoop for programmer
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
Hadoopことはじめ
Amazon Redshift ベンチマーク Hadoop + Hiveと比較
Hadoopデータプラットフォーム #cwt2013
Hadoopによる大規模分散データ処理
Hadoop loves H2
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?

What's hot (20)

PDF
Hadoop入門
PDF
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
PDF
世界一簡単なHadoopの話
PDF
ただいまHadoop勉強中
PPTX
SASとHadoopとの連携
PDF
Hadoop / MapReduce とは
PDF
並列データベースシステムの概念と原理
PDF
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
PDF
Hadoopのシステム設計・運用のポイント
PPTX
Hadoop / Elastic MapReduceつまみ食い
PDF
Hadoop概要説明
PDF
Hadoopの概念と基本的知識
PDF
Hadoop 基礎
PPT
はやわかりHadoop
PDF
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
PDF
MapReduce入門
PDF
FluentdやNorikraを使った データ集約基盤への取り組み紹介
PDF
Apache Drill を利用した実データの分析
PDF
MapReduceプログラミング入門
PDF
実践機械学習 — MahoutとSolrを活用したレコメンデーションにおけるイノベーション - 2014/07/08 Hadoop Conference ...
Hadoop入門
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
世界一簡単なHadoopの話
ただいまHadoop勉強中
SASとHadoopとの連携
Hadoop / MapReduce とは
並列データベースシステムの概念と原理
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Hadoopのシステム設計・運用のポイント
Hadoop / Elastic MapReduceつまみ食い
Hadoop概要説明
Hadoopの概念と基本的知識
Hadoop 基礎
はやわかりHadoop
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
MapReduce入門
FluentdやNorikraを使った データ集約基盤への取り組み紹介
Apache Drill を利用した実データの分析
MapReduceプログラミング入門
実践機械学習 — MahoutとSolrを活用したレコメンデーションにおけるイノベーション - 2014/07/08 Hadoop Conference ...
Ad

Viewers also liked (10)

PPTX
HTML5最新動向
PPTX
HTML5&API総まくり
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
KEY
ソーシャルゲームログ解析基盤のHadoop活用事例
PDF
Hadoopを40分で理解する #cwt2013
PDF
『ストーリーテリング ~概要~』第7回 POStudy 〜プロダクトオーナーシップ勉強会〜
PDF
主人が外資系IT企業に転職して4ヶ月が過ぎました
PDF
Hadoopを用いた大規模ログ解析
PPT
How to read linux kernel
PDF
最新業界事情から見るデータサイエンティストの「実像」
HTML5最新動向
HTML5&API総まくり
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ソーシャルゲームログ解析基盤のHadoop活用事例
Hadoopを40分で理解する #cwt2013
『ストーリーテリング ~概要~』第7回 POStudy 〜プロダクトオーナーシップ勉強会〜
主人が外資系IT企業に転職して4ヶ月が過ぎました
Hadoopを用いた大規模ログ解析
How to read linux kernel
最新業界事情から見るデータサイエンティストの「実像」
Ad

Similar to 今さら聞けないHadoop セントラルソフト株式会社(20120119) (20)

PPTX
Apache Spark チュートリアル
PPTX
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
PPT
Googleの基盤クローン Hadoopについて
PDF
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
PDF
MapReduce基礎
PDF
OSC2011 Tokyo/Spring Hadoop入門
PPT
Hadoopの紹介
PDF
OSC2012 OSC.DB Hadoop
PPT
Scala on Hadoop
PDF
MapReduce解説
PPTX
今さら聞けないHadoop勉強会第2回 セントラルソフト株式会社(20120228)
PDF
CloudSpiral 2014年度 ビッグデータ講義
PDF
Hadoop事始め
PDF
日々進化するHadoopの 「いま」
PPTX
PDF
OSC2012 Tokyo/Spring - Hadoop入門
PDF
MapReduceによる大規模データを利用した機械学習
PDF
B33 Super HadoopでRockなR&D by 平間大輔
PDF
マイニング探検会#10
PDF
Scalaプログラミング・マニアックス
Apache Spark チュートリアル
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
Googleの基盤クローン Hadoopについて
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
MapReduce基礎
OSC2011 Tokyo/Spring Hadoop入門
Hadoopの紹介
OSC2012 OSC.DB Hadoop
Scala on Hadoop
MapReduce解説
今さら聞けないHadoop勉強会第2回 セントラルソフト株式会社(20120228)
CloudSpiral 2014年度 ビッグデータ講義
Hadoop事始め
日々進化するHadoopの 「いま」
OSC2012 Tokyo/Spring - Hadoop入門
MapReduceによる大規模データを利用した機械学習
B33 Super HadoopでRockなR&D by 平間大輔
マイニング探検会#10
Scalaプログラミング・マニアックス

今さら聞けないHadoop セントラルソフト株式会社(20120119)

  • 1. 1
  • 2. 今さら聞けない Hadoop! セントラルソフト株式会 社 システム開発課 瀧澤徹 2
  • 3. Hadoopは象 のぬいぐるみ 3
  • 4. 4
  • 7. セミナーの目的  Hadoop 初心者の方に、動作概念をロールプレイを 通して理解してもらう。 7
  • 8. アジェンダ  データの大規模化  Hadoop  HDFS  ロールプレイ HDFS 編  MapReduce  ロールプレイ MapReduce 編  まとめ 8
  • 10. 世界のデジタルデータの推移 2006年で18万ペタバイト 2009年で80万ペタバイト 2011年で2ゼタ(200万ペタ)バイト 2020年で35ゼタ(3500万ペタ)バイト(予想) 10
  • 12. 大量データへの対応(1)  ハードディスク容量の増加にアクセ ス 速度が追い付いていない。  1テラバイトのデータを読み出すのに、 転送速度が 100MB/s ならば、2時間半 かかる。 12
  • 13. 大量データへの対応(2)  転送時間を短縮する方法。  100台のドライブに 1/100 ずつデータを保 管。  保管したデータを並列に取り出す。  転送時間が2時間半から2分以内に短縮。  ただし、次の問題が発生する。  障害の発生する確率が増える。  データを結合する仕組みが必要。 13
  • 14. 14
  • 15. 問題の解決  耐障害性  分割したデータをコピーして複数台のマシンに保存する ため、一部のストレージサーバが故障しても正常に稼 働。  デフォルトのコピー数は3。  データ結合  分散ファイルシステム。 15
  • 16. スケーラビリティ  RDB とは異なり、並列台数を増やしただけ性能が向 上 ( 合 計 処 理 能 力 ) (マシンの台 数) Bitqull: Data harvesting with MapReduceか ら 16
  • 18. Hadoopとは  ビッグデータを分散処理するためのミドルウェア  ビッグデータ:大量・非定型・リアルタイム性の高い データ  Google の GFS 論文と MapReduce 論文を元に作成  Java で記述  オープンソース 18
  • 20. Hadoop を使った事例 Hadoop 適用前 適用後  楽天 120時間  5時間 (1日の購入履歴) (1/24)  クックパッド 7000時間 (1年分のデータ処理)  30時間 (1/233)  Yahoo 624時間 (3年分のログ解析)  20分  VISA 720時間 (1/1872) (2年分のデータ解析)  13分 20 (1/3323)
  • 21. Hadoop を構成する技術  HDFS  分散ファイルシステム  MapReduce  分散処理フレームワーク 21
  • 23. HDFS (Hadoop Distributed File System)  複数のストレージにファイルを分散する  クライアントから HDFS を通してみると、一 つの ファイルのように見える  二種類のサーバで構成される  ネームノード(NameNode)  データノード(DataNode) 23
  • 24. ネームノード  マスターサーバ  分割されているデータがどのデータ ノードにあるか管理している。 ここには分 データノード 割データ0が 入ってる 分割データ split0 0 ネームノー 分割データ split0 ド(マス 1 ター) 分割データ split0 2 24
  • 25. データノード  スレーブサーバ  ブロック(分割したデータ)の読み 書きを行う。 データノード データAの 分割データ 0 データBの 分割データ 1 データCの 分割データ 3 25
  • 26. ロールプレイ HDFS編 26
  • 27. クライアント  クライアントがファイルをネームノードに渡す。 クライアント ネームノード
  • 28. ネームノード  渡されたファイルをデータノードの数に分割しそれ ぞれに渡す。 データノード ネームノード
  • 31. クライアント  クライアントがファイルをネームノードに渡す。 クライアント ネームノード
  • 32. ネームノード  渡されたファイルをデータノードの数に分割しそれ ぞれに渡す。 データノード ネームノード
  • 33. 補足  実際はレプリケーションと呼ばれる、データのコ ピーを 複数のノードへの保存が行われる。(デフォルトは3 データノード か所) ネームノード
  • 35. MapReduceとは  大量のデータを分散処理するフレームワーク。  各ノードが自身の持つデータを処理する。  3種類のフェーズから構成される。  Map  Shuffle & Sort  Reduce 35
  • 36. ワードカウントとは  ある文書中にある単語数をカウントし、単語ごとに 使われた回数を結果として出力する。 36
  • 37. ワードカウントの MapReduce の流れ ローカルファイル ローカルファイル ローカルファイル Shuffle & Sort 処理 ローカルファイル 37
  • 38. Map  入力データの中で自身のノードが持っているデータ を 処理し、中間データとして出力する。  入出力の形式は key と value のペア。 入力デー <key A , value B> タ 処理 Map 中間デー <key C , value D> タ 38
  • 39. ワードカウントの Map(入力データ)  ファイルの1行を読み込んで Map の入力にする  key :行の先頭文字がファイルの開始から何文字目かの 数値 (バイトオフセット)  入力ファイル(実ファ value :1行の内容そのまま 入力ファイル(HDFS 入力データ(<key , イル) value>) 上) ノード1 dog cat cat <0 , “dog cat cat” > dog cat cat ノード2 bird dog bird dog <12 , “bird dog” > dog dog dog ノード3 cat dog dog dog <21 , “dog dog dog”> cat dog <33 , “cat” > cat ノード4 cat dog <37 , “cat dog” > 39
  • 40. ワードカウントの Map(処理・中間データ)  入力の value を単語に分割して、それを中間データ の key 、数字の1を value にする  ノード4上の処理 入力データ 中間データ (<key , value>) (<key , value>) < “cat” , 1 > <33 , “cat” > < “cat” , 1 > <37 , “cat dog” > < “dog” , 1 > 40
  • 41. ワードカウントの Map(全体の流れ)  ノード4上の処理 < “cat” , 1 > <33 , “cat” > Map 処 cat < “cat” , 1 > cat dog <37 , “cat 理 dog”> < “dog” , 1 > ファイルからのデータの読み込み 1行を単語へ分割 中間データの出力 41
  • 42. Shuffle & Sort  Map が終了すると、生成された中間データを Reduce に渡す前に Shuffle & Sort が行われる。  Shuffle & Sort ではデータの key に基づいて、ソー トとvalue の集約、 ハッシュを用いて Reduce への データの割り振りを行う。 Map Reduce Map Shuffle & Sort Map Reduce Map 42
  • 43. ワードカウントの Shuffle & Sort Map の出力を同じ key の value を一つに集約し、 key の順にソート、ハッシュでどちらの Reduce へ渡すのか 決める ノード1の Map 出 ノード3の Map 出 Reduce1 の入力 力 力 < “dog” , 1 > < “dog” , 1 > < “dog” , {1,1,1,1,1,1} > < “cat” , 1 > < “dog” , 1 > < “cat” , 1 > < “dog” , 1 > ノード2の Map 出 ノード4の Map 出 Reduce2 の入力 力 力 < “cat” , 1 > < “bird” , 1 > < “bird” , {1} > < “cat” , 1 > < “cat” , {1,1,1,1} > < “dog” , 1 > < “dog” , 1 > 43
  • 44. Reduce  Shuffle & Sort で処理されたデータを受け取り、処理 を行って HDFS 上に結果を書きだす。  入出力の形式は key と value のペア。 B は同じ key A の value (B1,B2,…) の集ま り 処理されたデータ <key A , values B> 処理 Reduce 出力 key C value D 44
  • 45. ワードカウントの Reduce (処理・出力)  入力の value にある1の数を数えて、ファイルに key と ペアで出力する。  Reduce2 の処理 入力 出力(HDFS 上) < “bird” , {1} > bird 1 cat 4 < “cat” , {1,1,1,1} > 45
  • 46. (再掲)ワードカウントの MapReduce の流れ ローカルファイル ローカルファイル ローカルファイル Shuffle & Sort 処理 ローカルファイル 46
  • 48. クライアント  ネームノードにワードカウントを命令する クライアント ネームノード
  • 49. ネームノード  データノードに処理を指示する。 データノード ネームノード
  • 50. Map  入力データの単語ごとに、それぞれの単語をkeyに して、valueに1とする。  keyごとにソートしまとめる。  ネームノードにまとめたデータを渡す。 中間データ 入力データ <“bird”,1> ネームノード <“cat”,1> dog cat <“cat”,1> dog bird cat Map dog <“dog”,1> … <“dog”,1> <“dog”,1>
  • 51. ネームノード  中間データをマージします。  マージしたデータを二つを分ける。  Reduceに渡す。 Reduce 中間データ <“bird”,1> <“cat”,1> <“dog” ,{1,1,1}> <“bird” , {1}> <“cat”,1> <“cat” ,{1,1}> <“dog”,1> <“dog” ,{1,1,1}> <“bird” , {1}> <“dog”,1> <“cat” ,{1,1}> <“dog”,1> 51
  • 52. Reduce  単語ごとにまとめられたvalueを足して出力する。  ネームノードに渡す。 Reduce ネームノード <“dog” ,3> <“cat” ,2> <“bird” , 1>
  • 53. ネームノード  出力結果をデータノードにそれぞれ渡す。 データノード ネームノード 53
  • 54. クライント  ネームノードに対し、結果のファイルを要求する。 クライアント ネームノード 54
  • 55. ネームノード  出力結果のファイルを渡すように指示する。 ネームノード データノード 55
  • 56. データノード  ネームノードにファイルを渡す。 データノード ネームノード 56
  • 57. ネームノード  ファイルをクライアントに渡す。 ネームノード クライアント 57
  • 58. クライアント  受け取ったファイルの確認をする。 出力ファイ クライアント ル 確認 bird 1 cat 2 dog 3 … 58
  • 60. クライアント  ネームノードにワードカウントを命令する クライアント ネームノード
  • 61. ネームノード  データノードに処理を指示する。 データノード ネームノード
  • 62. Map  入力データの単語ごとに、それぞれの単語をkeyに して、valueに1とする。  keyごとにソートしまとめる。  ネームノードにまとめたデータを渡す。 中間データ 入力データ <“bird”,1> ネームノード <“cat”,1> dog cat <“cat”,1> dog bird cat Map dog <“dog”,1> … <“dog”,1> <“dog”,1>
  • 63. ネームノード  中間データをマージします。  マージしたデータを二つを分ける。  Reduceに渡す。 Reduce 中間データ <“bird”,1> <“cat”,1> <“dog” ,{1,1,1}> <“bird” , {1}> <“cat”,1> <“cat” ,{1,1}> <“dog”,1> <“dog” ,{1,1,1}> <“bird” , {1}> <“dog”,1> <“cat” ,{1,1}> <“dog”,1> 63
  • 64. Reduce  単語ごとにまとめられたvalueを足して出力する。  ネームノードに渡す。 Reduce ネームノード <“dog” ,3> <“cat” ,2> <“bird” , 1>
  • 65. ネームノード  出力結果をデータノードにそれぞれ渡す。 データノード ネームノード 65
  • 66. クライント  ネームノードに対し、結果のファイルを要求する。 クライアント ネームノード 66
  • 67. ネームノード  出力結果のファイルを渡すように指示する。 ネームノード データノード 67
  • 68. データノード  ネームノードにファイルを渡す。 データノード ネームノード 68
  • 69. ネームノード  ファイルをクライアントに渡す。 ネームノード クライアント 69
  • 70. クライアント  受け取ったファイルの確認をする。 出力ファイ クライアント ル 確認 bird 1 cat 2 dog 3 … 70
  • 71. (再掲)ワードカウントの MapReduce の流れ ローカルファイル ローカルファイル ローカルファイル Shuffle & Sort 処理 ローカルファイル 71
  • 73. まとめ  Hadoop はデータの分散処理システムであり、 HDFS と MapReduce で構成される  HDFS はデータファイルを分散管理するシステムで あり以下のような構成である  分割したデータの保存場所を管理する「ネームノード」  実際にデータを保存する「データノード」  MapReduce は以下の3つのフェーズで構成される  入力データの加工を行う「Map」  データの整理と分配を行う「Shuffle & Sort」  まとめられたデータに対して処理を行う「Reduce」 73
  • 74. 今後の発表ネタ  MapReduce 関連  アルゴリズム  転置インデックス ・・・基本的な MapReduce  TF-IDF ・・・複数回の MapReduce  k-means 法 ・・・条件による MapReduce の分岐  MapReduce プログラミング手法  複数ファイルのデータのマージ  パラメータ引渡し  etc  Hadoop 関連のシステム(エコシステム)  HBase  Hive 74