Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,278 views

Published on

  • 一部でご指摘があった点についてコメントいたします。
    実際にはNNからDNにはクライアントにポインタを示すためにデータは投げません。 スライドの説明は、ロールプレイワークでデータの紙を渡すシーケンスを簡素化して表現しています。

    実際のワークのなかでは、このときはNNはデータのポインタを示すだけでデータはクライアントから転送されるということを解説しています。
    スライドが誤解を招く表現であったことをお詫びいたします。

    ご指摘、ご意見ありがとうございました。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

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

×