Hadoopの紹介

12,185 views

Published on

Published in: Technology, News & Politics
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,185
On SlideShare
0
From Embeds
0
Number of Embeds
75
Actions
Shares
0
Downloads
153
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Hadoopの紹介

    1. 1. Introduction to Hadoop Satoshi Yamada 2008/11/5
    2. 2. 内容 <ul><li>基本的に Hadoop の概観とイントロ </li></ul><ul><li>性能に関わるようなテクニカルな詳細は省略 </li></ul>
    3. 3. 謝辞 <ul><li>以下のホームページを参照&資料を貸していただきました </li></ul><ul><ul><li>http://hadoop.apache.org </li></ul></ul><ul><ul><li>http://developer.yahoo.net/blogs/hadoop/2008/02/yahoo-worlds-largest-production-hadoop.html </li></ul></ul><ul><ul><li>http://www.techcrunch.com/2008/01/09/google-processing-20000-terabytes-a-day-and-growing/ </li></ul></ul><ul><ul><li>http://codezine.jp/article/detail/2448?p=1 </li></ul></ul><ul><ul><li>http://www.slideshare.net/kakuda/hadoop/ </li></ul></ul>
    4. 4. outline <ul><li>what is Hadoop? </li></ul><ul><li>Hadoop distributed file system </li></ul><ul><li>Hadoop mapreduce </li></ul><ul><li>Hadoop related modules </li></ul><ul><li>how to use Hadoop </li></ul>
    5. 5. Hadoop とは <ul><li>Google の基盤プラットフォームのようなオープンソースインフラストラクチャ </li></ul><ul><li>http://hadoop.apache.org </li></ul>
    6. 6. Hadoop の開発 <ul><li>Apache グループで開発 </li></ul><ul><ul><li>Yahoo! の Doug Cutting 氏らが開発 </li></ul></ul>
    7. 7. Hadoop の使用状況 <ul><li>Yahoo! 、 Facebook, Amazon.com, IBM の CC など </li></ul><ul><li>Hadoop の mailing list では Lucene からの乗り換えなどを考えている人がいた </li></ul><ul><li>というわけで流行っている </li></ul>
    8. 8. Yahoo! における使用状況 ( おそらく Hadoop を使用する最大規模のアプリケーション ) <ul><li>インデックス内にあるページ間リンク数 : 約 1 兆リンク </li></ul><ul><li>出力サイズ : 300 TB 超(圧縮後で) </li></ul><ul><li>MapReduce 処理で使うコアの数 : 1 万超 </li></ul><ul><li>製造クラスタで使うローディスク:  5PB (約 5000 兆バイト)超 </li></ul><ul><li>従来の Yahoo! 環境での実行時間を 34% 削減 </li></ul><ul><ul><li>http://developer.yahoo.net/blogs/hadoop/2008/02/yahoo-worlds-largest-production-hadoop.html </li></ul></ul>
    9. 9. ちなみに・・・ Google のプラットフォームの状況 http://www.techcrunch.com/2008/01/09/google-processing-20000-terabytes-a-day-and-growing/
    10. 10. Hadoop の特徴的な機能 <ul><li>Hadoop Core </li></ul><ul><li>HBase </li></ul><ul><li>Pig </li></ul><ul><li>ZooKeeper </li></ul><ul><li>( 赤字は最近追加された機能) </li></ul>
    11. 11. Hadoop Core <ul><li>Hadoop の機能的な特徴 </li></ul><ul><ul><li>Scalable     </li></ul></ul><ul><ul><ul><li>ペタバイトクラスのデータを扱える </li></ul></ul></ul><ul><ul><li>Economical   </li></ul></ul><ul><ul><ul><li>汎用プラットフォームによるクラスタにまたがって、データと実行を分散出来る。クラスタは数千オーダーでも対応可能 </li></ul></ul></ul><ul><ul><li>Efficient     </li></ul></ul><ul><ul><ul><li>データを分散させることで、ノード間で並列に実行出来る。そのため、実行速度が速い </li></ul></ul></ul><ul><ul><li>Reliable     </li></ul></ul><ul><ul><ul><li>自動的にデータを複数コピーし、失敗を契機にタスクの移動を行わせる </li></ul></ul></ul>
    12. 12. Hadoop Core <ul><li>Hadoop は Hadoop Distributed File System   (HDFS) を用いて実行を行う </li></ul><ul><li>MapReduce は HDFS を用いて実装されている </li></ul><ul><li>MapReduce ではアプリケーションをたくさんの小さなブロックに分割して実行 </li></ul><ul><li>HDFS では信頼性を失わないために、複数のデータのレプリカを作成し、クラスタ内の各コンピュータに配置する </li></ul>
    13. 13. Hadoop Core <ul><li>Hadoop の概観 </li></ul>公式サイトより
    14. 14. outline <ul><li>what is Hadoop? </li></ul><ul><li>Hadoop distributed file system </li></ul><ul><li>Hadoop mapreduce </li></ul><ul><li>Hadoop related modules </li></ul><ul><li>how to use Hadoop </li></ul>
    15. 15. Hadoop Distributed File System <ul><li>HDFS の特徴 </li></ul><ul><ul><li>フォールトトレラント性能が高く、安価なハードウェア上で実現出来る </li></ul></ul><ul><ul><li>アプリケーションへの高速アクセスを提供し、巨大なデータセットを持つアプリケーションに適している </li></ul></ul><ul><ul><li>もともと A pache Nutch ウェブ検索エンジンプロジェクトのためのインフラ </li></ul></ul>
    16. 16. HDFS が想定する問題とゴール その1 <ul><li>ハードウェアの故障 </li></ul><ul><ul><li>故障を検知し、迅速かつ自動的に回復する </li></ul></ul><ul><li>ストリームデータアクセス </li></ul><ul><ul><li>Hadoop アプリケーションにとって必要のない POSIX 条件を排除することでスループットを向上させる </li></ul></ul><ul><li>Large Data Sets </li></ul><ul><ul><li>大きなサイズのファイルをサポート </li></ul></ul>
    17. 17. HDFS が想定する問題とゴール その2 <ul><li>データの一貫性 </li></ul><ul><ul><li>write-once-read-many アクセスモデル </li></ul></ul><ul><ul><ul><li>MapReduce アプリケーションや web クロールアプリケーションに対応できる </li></ul></ul></ul><ul><li>データの移動のオーバヘッド </li></ul><ul><ul><li>データでなくアプリケーションを移動させる </li></ul></ul><ul><li>ポータビリティ </li></ul><ul><ul><li>様々なプラットフォームに対応 </li></ul></ul><ul><ul><ul><li>基本的に Java が入っていれば動く (?) </li></ul></ul></ul>
    18. 18. HDFS が想定する問題とゴール その 3 <ul><li>マスタ/スレーブアーキテクチャ </li></ul><ul><ul><li>単一の Namenode と複数の Datanodes </li></ul></ul>
    19. 19. HDFS が想定する問題とゴール その 4 <ul><li>The File System Namespace </li></ul><ul><ul><li>コンベンショナルな階層ファイル構造 </li></ul></ul><ul><li>信頼性 </li></ul><ul><ul><li>データを複製して、異なるノード間で保持 </li></ul></ul><ul><ul><li>ラックの認識した負荷分散が可能 </li></ul></ul><ul><ul><li>Datanode は定期的に Namenode と通信を行い、安否を知らせる </li></ul></ul><ul><ul><li>Namenode は Datanode の状況から、データの複製状況などを考慮 </li></ul></ul><ul><ul><li>などなど </li></ul></ul>
    20. 20. データ構造 <ul><li>データブロック </li></ul><ul><ul><li>64MB </li></ul></ul><ul><li>staging </li></ul><ul><ul><li>クライアントは溜め込んだデータの情報をすぐに Namenodes に報告しない </li></ul></ul><ul><li>アクセシビリティ </li></ul><ul><ul><li>HTTP ブラウザからの HDFS インスタンスのファイルのブラウジングが可能 </li></ul></ul>
    21. 21. outline <ul><li>what is Hadoop? </li></ul><ul><li>Hadoop distributed file system </li></ul><ul><li>Hadoop mapreduce </li></ul><ul><li>Hadoop Related modules </li></ul><ul><li>how to use Hadoop </li></ul>
    22. 22. Google での MapReduce 利用例 <ul><li>分散 Grep </li></ul><ul><li>分散ソート </li></ul><ul><li>逆リンク解析 </li></ul><ul><li>アクセスログ解析 </li></ul><ul><li>検索インデックス構築 </li></ul><ul><li>文書クラスタ解析 </li></ul><ul><li>機械学習 </li></ul><ul><li>統計機械翻訳 </li></ul>・・・ etc
    23. 23. Hadoop での MapReduce <ul><li>概要 </li></ul><ul><ul><li>job から インプットデータを分割 </li></ul></ul><ul><ul><li>task として m ap 関数が並列に処理 </li></ul></ul><ul><ul><li>アウトプットをソートし、 r educe task として r educe 関数が処理 </li></ul></ul><ul><ul><li>H adoop のフレームワークはこれらの t ask をスケジュールし、モニタし、失敗した際には再実行させる </li></ul></ul><ul><ul><li>( Hadoop での呼び方を注意しておくとよいかも) </li></ul></ul>
    24. 24. MapReduce 実行における マスタ/スレーブ <ul><li>マスタ: JobTracker </li></ul><ul><ul><li>job を構成する t ask をスケジュールし、モニタし、失敗した場合に再実行する </li></ul></ul><ul><ul><li>単一システムに1つだけ存在 </li></ul></ul><ul><li>スレーブ :TaskTracker </li></ul><ul><ul><li>マスタの指示に従って t ask を処理 </li></ul></ul><ul><ul><li>複数存在 </li></ul></ul>
    25. 25. MapReduce のインタフェース <ul><li>インプットにもアウトプットにも < key, value> という形式を用いる </li></ul><ul><li>map からの出力は reduce に入る前に、ローカル集約を受ける </li></ul><ul><li>reduce では値を足し合わせるだけ </li></ul><ul><li>map(), reduce() の実装のために、 Mapper, Reducer というインタフェースを持つ </li></ul>
    26. 26. 実行例 wordcount プログラム <ul><li>入力ファイル file01 と file02 </li></ul><ul><ul><li>file01: Hello World Bye World </li></ul></ul><ul><ul><li>file02: Hello Hadoop Goodbye Hadoop </li></ul></ul><ul><li>map 関数の適用 </li></ul><ul><ul><li>< Hello, 1>< World, 1>< Bye, 1>< World, 1> </li></ul></ul><ul><ul><li>< Hello, 1>< Hadoop, 1>< Goodbye, 1>< Hadoop, 1> </li></ul></ul><ul><li>map からのローカル集約 (combiner) </li></ul><ul><ul><li>< Bye, 1>< Hello, 1>< World, 2> </li></ul></ul><ul><ul><li>< Goodbye, 1>< Hadoop, 2>< Hello, 1> </li></ul></ul><ul><li>ソート&集約 </li></ul><ul><ul><li><Bye, 1><Goodby, 1><Hadoop, 2><Hello, 1, 1><World, 2> </li></ul></ul><ul><li>reduce からの出力 </li></ul><ul><ul><li>< Bye, 1>< Goodbye, 1>< Hadoop, 2>< Hello, 2>< World, 2> </li></ul></ul>
    27. 27. Mapper <ul><li>key/value のインプットデータを k ey/value の中間データにマップ </li></ul><ul><li>中間データはインプットデータと同じ型である必要はない </li></ul><ul><li>Mapper の出力はソートされ、 R educer ごとに分割される </li></ul><ul><li>ユーザは c ombiner をオプションで定義することで、中間出力値のローカルな集約を行うことが出来る </li></ul>
    28. 28. Reducer <ul><li>Reducer は k ey を共有する中間値のセットを r educe して v alue のセットを小さくする </li></ul><ul><li>Reducer における3つのフェーズ </li></ul><ul><ul><li>shuffle </li></ul></ul><ul><ul><ul><li>HTTP 経由で、全ての m apper の出力の関連ある区分を取っていく </li></ul></ul></ul><ul><ul><li>sort </li></ul></ul><ul><ul><ul><li>key により、 R educer の入力値をグループ化する </li></ul></ul></ul><ul><ul><li>reduce </li></ul></ul><ul><ul><ul><li>グループ化された入力のそれぞれの < key, (list of values)> ペアごとに、 r educe が呼ばれる </li></ul></ul></ul><ul><li>Reducer の出力はソートされていない </li></ul>
    29. 29. Hadoop に関連するその他の モジュール
    30. 30. hBase <ul><li>大規模分散データベース </li></ul><ul><li>google の BigTable のクローン </li></ul>http://codezine.jp/article/detail/2448?p=1
    31. 31. Pig <ul><li>大規模データセットを解析するためのプラットフォーム </li></ul><ul><li>Pig のインフラ層は(現段階では)大規模並列性が既に存在する MapReduce プログラムを生成するコンパイラ </li></ul><ul><li>Pig の言語層は以下の特徴を持つ Pig Latin からなる </li></ul><ul><ul><li>プログラムの簡便化 </li></ul></ul><ul><ul><ul><li>相互関係があるなどの、並列化が難しいタスクを簡単に書き、理解し、実行する </li></ul></ul></ul><ul><ul><li>最適化の機会 </li></ul></ul><ul><ul><ul><li>自動的に実行を最適化する </li></ul></ul></ul><ul><ul><li>拡張性 </li></ul></ul><ul><ul><ul><li>ユーザはある実行に特化した関数を書くことが出来る </li></ul></ul></ul>
    32. 32. ZooKeeper <ul><li>並列アプリケーションを実装する段階でのデータの競合やデッドロックの発生を抑えるためのコーディネーションサービス </li></ul><ul><li>Yahoo! Message Broker などのサービスで既に用いられている </li></ul>
    33. 33. How to use Hadoop <ul><li>Requirement </li></ul><ul><li>セットアップ </li></ul><ul><li>サンプル実行 </li></ul><ul><li>コンパイル&実行 </li></ul>
    34. 34. Requirement <ul><li>サポート環境 </li></ul><ul><ul><li>L inux </li></ul></ul><ul><ul><li>W in 32 ( 開発段階 ) </li></ul></ul><ul><ul><li>(おそらく Solaris でも動く) </li></ul></ul><ul><li>必要なソフトウェア </li></ul><ul><ul><li>J ava 1.5 以上 (S un が望ましい ) </li></ul></ul><ul><ul><li>s sh, sshd </li></ul></ul><ul><ul><li>W indows ではさらに C ygwin が必要 </li></ul></ul>
    35. 35. Hadoop における実行モード <ul><li>Standalone Operation </li></ul><ul><ul><li>単一ノードで動かす、デフォルトの設定 </li></ul></ul><ul><ul><li>n on - 分散環境であり、単一の J ava プロセス </li></ul></ul><ul><ul><li>デバッグ 時に有用 </li></ul></ul><ul><li>P seudo-Distributed Operation </li></ul><ul><ul><li>単一ノード上で動かすが、それぞれの H adoop が異なる J ava プロセスとして実装されている </li></ul></ul><ul><li>F ully-Distributed Operation </li></ul><ul><ul><li>複数ノードで動かす </li></ul></ul>
    36. 36. セットアップ <ul><li>すべてのマシンが設定を格納したファイルを同じディレクトリ上に持つ </li></ul><ul><ul><li>JAVA_HOME の設定 </li></ul></ul><ul><ul><ul><li>hadoop-0.18.2/conf/hadoo-env.sh </li></ul></ul></ul><ul><ul><li>マスタの設定 </li></ul></ul><ul><ul><ul><li>hadoop-0.18.2/conf/masters </li></ul></ul></ul><ul><ul><ul><li>hadoop-0.18.2/conf/hadoop-site.xml </li></ul></ul></ul><ul><ul><li>スレーブの設定 </li></ul></ul><ul><ul><ul><li>hadoop-0.18.2/conf/slaves </li></ul></ul></ul><ul><li>ssh での鍵をマスタからスレーブに渡し、マスタから password なしでログインできるようにしておく </li></ul>
    37. 37. Hadoop StartUp <ul><li>初期化 </li></ul><ul><ul><li>$ bin/hadoop namenode -format </li></ul></ul><ul><li>Hadoop の開始 </li></ul><ul><ul><li>$ bin/start-all.sh </li></ul></ul><ul><li>Hadoop の起動確認 </li></ul><ul><ul><li>[hadoop@master]$ jps </li></ul></ul><ul><ul><ul><li>2475 SecondaryNameNode </li></ul></ul></ul><ul><ul><ul><li>2673 Jps </li></ul></ul></ul><ul><ul><ul><li>2573 JobTracker </li></ul></ul></ul><ul><ul><ul><li>2319 NameNode </li></ul></ul></ul><ul><ul><li>[hadoop@slave] $ jps </li></ul></ul><ul><ul><ul><li>16149 Jps </li></ul></ul></ul><ul><ul><ul><li>16106 TaskTracker </li></ul></ul></ul><ul><ul><ul><li>16024 DataNode </li></ul></ul></ul>
    38. 38. この後はデモの予定
    39. 39. これまでの失敗例 <ul><li>NameNode or DataNode が立ち上がらない </li></ul><ul><li>プログラム実行時にエラーなど </li></ul><ul><li>勉強会の時に惜しくも失敗 </li></ul><ul><li>原因として考えられること </li></ul><ul><ul><li>設定ミス </li></ul></ul><ul><ul><li>ファイルが壊れた </li></ul></ul><ul><ul><li>その他バグ </li></ul></ul>
    40. 40. Hadoop 使用時に注意すべき点 <ul><li>実感した感じでは、まだまだ扱いづらい </li></ul><ul><ul><li>( 当然だが ) ファイル、ポートの設定などきちんと </li></ul></ul><ul><ul><li>バグもたくさんある、ようだ </li></ul></ul><ul><ul><li>問題点が把握しづらい </li></ul></ul><ul><ul><li>Hadoop メーリスでも同様のコメントが多い </li></ul></ul><ul><li>ただし、プラットフォーム自体をいじるのでなければ、そこまで心配する必要はないかも </li></ul>
    41. 41. <ul><li>以上です </li></ul>

    ×