Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
Hadoop入門

株式会社 Preferred Infrastructure
       西川 徹
とは?
• Googleの基盤ソフトウェアのクローン
  – Google File System, MapReduce
• Yahoo Research の Doug Cutting氏が開発
  – 元々はLuceneのサブプロジェクト
  ...
Google関連 参考論文 & スライド
• The Google File System
  – Sanjay Ghemawat, Howard Gobioff, and Shu-Tak
    Leong, SOSP 2003

• Map...
Hadoop参考文献
• Hadoop公式サイト
 – http://hadoop.apache.org/core/
 – Wiki: http://wiki.apache.org/hadoop/
    • インストール方法・チュートリアル・...
弊社による取り組み
• OSS分散システム「Hadoop」解析資料
 – NTTレゾナント様と共同で調査・公開


• Googleの基盤システムと比較し、機能的には
  遜色が無い事を確認
 – GFS/HDFSの機能比較
 – MapRed...
性能
• Apache Hadoop wins TeraSort Benchmark!
  – http://developer.yahoo.com/blogs/hadoop/2008/
    07/apache_hadoop_wins_te...
Hadoop,MapReduce登場の背景
問題
• インターネットの爆発的普及により、非常に大
  規模なデータが蓄積されている
 – 例えばWebページのサイズを考えてみる
   • 200億ページ * 20KB = 400 TB

 – Disk読み込み性能は50MB/sec (S...
解決方法
• お金
 – とにかく大量のマシンを用意
 – 1000台マシンがあれば1台で400G処理すればok
 – 読み込むのに8000秒程度で済む
お金だけでは解決しない
• プログラミングが非常に困難になる
 – プロセス起動
 – プロセス監視              うはー
                     めんどくせー!
 – プロセス間通信
 – デバッグ
 – 最適化...
既存の分散/並列プログラミング環境
• MPI (Message Passing Interface)
  – 並列プログラミングのためのライブラリ
     • スパコンの世界では主流


  – プログラマは各プロセスの挙動を記述
    ...
MPIの問題点
• 問題点
 – 耐障害性への考慮が少ない
  • アプリケーションが独自にチェックポイント機能を実装
  • 1万台以上の環境で計算するには耐えられない
    – 1台が1000日程度で壊れるとすると、1日で10台程度壊れる...
そこでMapReduce
• 大体の大規模データ処理を行う問題に特化したプロ
  グラミングモデル
 – アルゴリズムの記述のみにプログラマが集中できる
 – ただし世の中の問題全てに対して最適なモデルではない

• ライブラリ側で面倒な事を全...
MapReduce型の処理
•   WordCount
•   Grep
•   Sort (適切なPartition関数を選択する必要)
•   Log Analysis
•   Web Graph Generation
•   Invert...
Googleでの使用率
MapReduce
プログラミングモデル
MapReduceの実行フロー


Data      Map

                          Reduce   Data


Data      Map   Shuffle

                      ...
MapReduceの実行フロー
• 入力読み込み
  – <key, value>*
• Map
  – map: <key, value> ⇒ <key’, value’>*
• Shuffle
  – shuffle: <key’, red...
MapReduceの実行フロー

                 <k, v>* ⇒ <k’, v’>*
       <k, v>*
Data                   Map                  <k’, <v’>...
入力文書: doc1      例: ワードカウント
  foo foo foo
 bar bar buzz




    Data         Map

                                 Reduce  ...
入力文書: doc1          例: ワードカウント
 foo foo foo
 bar bar buz




    Data             Map
        doc1: foo
        doc1: foo ...
入力文書: doc1         例: ワードカウント
 foo foo foo
 bar bar buz


               doc1: foo
               doc1: foo
    Data      ...
入力文書: doc1         例: ワードカウント
 foo foo foo
 bar bar buz


               doc1: foo         foo: 1
               doc1: foo...
入力文書: doc1     例: ワードカウント
 foo foo foo
 bar bar buz


                foo: 1
                foo: 1
                Map   ...
入力文書: doc1     例: ワードカウント
 foo foo foo
 bar bar buz




                Map   bar: <1, 1>
    Data
                      b...
入力文書: doc1     例: ワードカウント
 foo foo foo
 bar bar buz




                Map   bar: <1, 1>            bar: 2
    Data
     ...
入力文書: doc1     例: ワードカウント
 foo foo foo
 bar bar buz




                Map            bar: 2
    Data
                   ...
例: ワードカウント
• 擬似コード
  map(string key, string value) {
    foreach word in value:
      emit(word, 1);
  }

  reduce(string ...
MapReduceの特徴
• データ通信
 – 各Map処理、Reduce処理は完全に並列に実行可能
 – マシンを増やせばその分処理能力が増える

• 耐故障性
 – 失敗したMap, Reduce処理は他のノードで再実行される
 – 遅いM...
Hadoopの中身
Hadoopの中身



• Hadoop Distributed File System (HDFS)
  – GFSのクローン
  – MapReduceプログラムの入力や出力に使用
• Hadoop MapReduce
  – MapRe...
Hadoop Distributed File System
• Master/Slave アーキテクチャ
• ファイルはブロックという単位に分割して保存

• NameNode
  – Master
  – ファイルのメタデータ(パス・権限な...
From: http://hadoop.apache.org/core/docs/current/hdfs_design.html
Hadoop MapReduce
• Master/Slave アーキテクチャ

• JobTracker
   – Master
   – JobをTaskに分割し、Taskを各TaskTrackerに分配
      • Job: MapR...
MapReduce Processing
                        JobTracker

TaskTracker
Mapフェーズ
• 分割された入力を読み込み、mapプログラムを動かす
• Partitioner(通常はHash)を使用して宛先を決定
• バッファサイズが閾値を越えたらメモリ上でソートして
  ディスクに書き出す
• すべてが終わったらソー...
Reduceフェーズ
•   Mapフェーズの出力をフェッチ
•   メモリ上でキー毎にまとめあげる
•   Reduceプログラムを動かす
•   出力をHDFSに書き出し
    – Amazon S3などにも書き出せる
Hadoopを取り巻く環境
概要
• Hadoopを扱いやすくするミドルウェア
  – Pig
  – Hive
                     Pig,Hive
  – HBase
                                       ...
Pig
• Pig Latinという専用言語で簡単にDWH的な処
  理を書けるようにしたミドルウェア
 – Javaを使用せずに、SQL的な言語でMapReduce処
   理を記述する事が出来る
 – Googleでは、同様にSawzall...
Hive
• Pigと同じく、SQLのような言語(HiveQL)で処理
  を記述することができる
 – Facebookが独自に開発
• Join,Group Byといった操作を、SQLであたかも
  扱っているように書くことが可能
• Fa...
HBase
• BigTableのクローン
• HDFSは巨大なファイルを扱うのは苦手だが、
  細かいデータを大量に扱う操作は苦手
• 細かい粒度・低レイテンシなデータアクセスを
  可能にするための分散データベース
 – 同じ分野のソフトウ...
HadoopDB
• Hadoopは、バッチ処理が得意
• OLAP的な処理はRDBMSが得意

• 2つをくっつけて、大量データ・非構造的なデ
  ータをHadoopで処理し、対話的なBI処理は
  RDBMSに任せる
RDBMSとの共存
• RDBMSとHadoopは競合するものではない

• 商用製品でもMapReduceとRDBMSのハイブリ
  ッドなものがでてきた
 – Vertica
まとめ
まとめ
•   Hadoopの概要
•   MapReduceプログラミングモデル
•   Hadoopの中身・アーキテクチャ
•   Hadoopを取り巻く環境
Próxima SlideShare
Cargando en…5
×

Hadoop入門

48.766 visualizaciones

Publicado el

Hadoop Conference Japan 2009 「Hadoop入門」の講演資料

Publicado en: Tecnología
  • Inicia sesión para ver los comentarios

Hadoop入門

  1. 1. Hadoop入門 株式会社 Preferred Infrastructure 西川 徹
  2. 2. とは? • Googleの基盤ソフトウェアのクローン – Google File System, MapReduce • Yahoo Research の Doug Cutting氏が開発 – 元々はLuceneのサブプロジェクト – Apache Project • Javaで記述!
  3. 3. Google関連 参考論文 & スライド • The Google File System – Sanjay Ghemawat, Howard Gobioff, and Shu-Tak Leong, SOSP 2003 • MapReduce: Simplified Data Processing on Large Clusters – Jeffrey Dean and Sanjay Ghemawat, SOSP 2004 • Parallel Architectures and Compilation Techniques (PACT) 2006, KeyNote – http://www.cs.virginia.edu/~pact2006/program/mapr educe-pact06-keynote.pdf
  4. 4. Hadoop参考文献 • Hadoop公式サイト – http://hadoop.apache.org/core/ – Wiki: http://wiki.apache.org/hadoop/ • インストール方法・チュートリアル・プレゼン資料など – Running Hadoop on Ubuntu Linux • http://www.michael- noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_(Single- Node_Cluster) • http://www.michael- noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_%28Multi- Node_Cluster%29 • Hadoop, hBaseで構築する大規模データ処理システム on Codezine – http://codezine.jp/a/article/aid/2448.aspx
  5. 5. 弊社による取り組み • OSS分散システム「Hadoop」解析資料 – NTTレゾナント様と共同で調査・公開 • Googleの基盤システムと比較し、機能的には 遜色が無い事を確認 – GFS/HDFSの機能比較 – MapReduce/Hadoop Mapreduceの機能比較 – ソースコード構造の解析 – ベンチマーク結果
  6. 6. 性能 • Apache Hadoop wins TeraSort Benchmark! – http://developer.yahoo.com/blogs/hadoop/2008/ 07/apache_hadoop_wins_terabyte_sort_benchm ark.html – 規定フォーマットの1Tデータをソート – 209 seconds (5G/sec, 5M/sec per node) • 910 nodes, 4 dual core Xeon 2.0GHz, 1G Ether 物量作戦
  7. 7. Hadoop,MapReduce登場の背景
  8. 8. 問題 • インターネットの爆発的普及により、非常に大 規模なデータが蓄積されている – 例えばWebページのサイズを考えてみる • 200億ページ * 20KB = 400 TB – Disk読み込み性能は50MB/sec (SATA) • 1台では読み込むだけでも約100日 • 保存するだけでも500Gのディスクが1000個程度必要 • このデータを効率的に処理したい
  9. 9. 解決方法 • お金 – とにかく大量のマシンを用意 – 1000台マシンがあれば1台で400G処理すればok – 読み込むのに8000秒程度で済む
  10. 10. お金だけでは解決しない • プログラミングが非常に困難になる – プロセス起動 – プロセス監視 うはー めんどくせー! – プロセス間通信 – デバッグ – 最適化 – 故障時への対応 • しかも、新しいプログラムを作る度にこれらの 問題をいちいち実装する必要がある
  11. 11. 既存の分散/並列プログラミング環境 • MPI (Message Passing Interface) – 並列プログラミングのためのライブラリ • スパコンの世界では主流 – プログラマは各プロセスの挙動を記述 • 通信プリミティブ(Send, Recv, All-to-All)が提供されてお り、それを用いてデータ通信を実現 – 利点 • 通信パターンなどをプログラマがコントロールでき、問 題に対して最適なプログラムを記述する事ができる
  12. 12. MPIの問題点 • 問題点 – 耐障害性への考慮が少ない • アプリケーションが独自にチェックポイント機能を実装 • 1万台以上の環境で計算するには耐えられない – 1台が1000日程度で壊れるとすると、1日で10台程度壊れる – 壊れる度にチェックポイントから戻すとかやってらんない – RAID組んでもそのうち壊れるので一緒 – 通信パターンなどを記述する作業が多くなり、実 際のアルゴリズムを記述するのにたどり着くまで 時間がかかる
  13. 13. そこでMapReduce • 大体の大規模データ処理を行う問題に特化したプロ グラミングモデル – アルゴリズムの記述のみにプログラマが集中できる – ただし世の中の問題全てに対して最適なモデルではない • ライブラリ側で面倒な事を全て担当 – 自動的に処理を分散/並列化 – ロードバランシング – ネットワーク転送・ディスク使用効率化 – 耐障害性の考慮 • 1ノードで失敗したら違う場所でやりなおせばいいよね – MapReduceが賢くなれば、それを使う全てのプログラムが 賢くなる!
  14. 14. MapReduce型の処理 • WordCount • Grep • Sort (適切なPartition関数を選択する必要) • Log Analysis • Web Graph Generation • Inverted Index Construction • Machine Learning – NaiveBayes, K-means, Expectation Maximization, etc.
  15. 15. Googleでの使用率
  16. 16. MapReduce プログラミングモデル
  17. 17. MapReduceの実行フロー Data Map Reduce Data Data Map Shuffle Reduce Data Data Map
  18. 18. MapReduceの実行フロー • 入力読み込み – <key, value>* • Map – map: <key, value> ⇒ <key’, value’>* • Shuffle – shuffle: <key’, reducers> ⇒ destination reducer • Reduce – reduce: <key’, <value’> * > ⇒ <key’’, value’’>* • 出力書き出し – <key’’, value’’>*
  19. 19. MapReduceの実行フロー <k, v>* ⇒ <k’, v’>* <k, v>* Data Map <k’, <v’>*>* ⇒ <k’’, v’’>* Reduce Data <k, v>* ⇒ <k’, v’>* <k, v>* Data Map Shuffle Reduce Data <k, v>* ⇒ <k’, v’>* <k, v>* <k’, <v’>*>* ⇒ <k’’, v’’>* Data Map
  20. 20. 入力文書: doc1 例: ワードカウント foo foo foo bar bar buzz Data Map Reduce Data Data Map Shuffle Reduce Data Data Map
  21. 21. 入力文書: doc1 例: ワードカウント foo foo foo bar bar buz Data Map doc1: foo doc1: foo Reduce Data Data Map Shuffle doc1: foo doc1: bar Reduce Data Data Map doc1: bar doc1: buz
  22. 22. 入力文書: doc1 例: ワードカウント foo foo foo bar bar buz doc1: foo doc1: foo Data Map doc1: foo Reduce Data doc1: bar Data Map Shuffle doc1: bar Reduce Data doc1: buz Data Map
  23. 23. 入力文書: doc1 例: ワードカウント foo foo foo bar bar buz doc1: foo foo: 1 doc1: foo foo: 1 Data Map doc1: foo bar: 1 Reduce Data doc1: bar foo: 1 Data Map doc1: bar bar: 1 Reduce Data doc1: buz buz: 1 Data Map
  24. 24. 入力文書: doc1 例: ワードカウント foo foo foo bar bar buz foo: 1 foo: 1 Map bar: <1, 1> Data buz: <1> bar: 1 Reduce Data foo: 1 Data Map foo: <1, 1, 1> bar: 1 Reduce Data buz: 1 Data Map
  25. 25. 入力文書: doc1 例: ワードカウント foo foo foo bar bar buz Map bar: <1, 1> Data buz: <1> Reduce Data Data Map foo: <1, 1, 1> Reduce Data Data Map
  26. 26. 入力文書: doc1 例: ワードカウント foo foo foo bar bar buz Map bar: <1, 1> bar: 2 Data buz: <1> buz: 1 Reduce Data Data Map foo: <1, 1, 1> foo: 3 Reduce Data Data Map
  27. 27. 入力文書: doc1 例: ワードカウント foo foo foo bar bar buz Map bar: 2 Data buz: 1 Reduce Data Data Map foo: 3 Reduce Data Data Map
  28. 28. 例: ワードカウント • 擬似コード map(string key, string value) { foreach word in value: emit(word, 1); } reduce(string key, vector<int> values) { int result = 0; for (int i = 0; I < values.size(); i++) result += values[i]; emit(key, result); }
  29. 29. MapReduceの特徴 • データ通信 – 各Map処理、Reduce処理は完全に並列に実行可能 – マシンを増やせばその分処理能力が増える • 耐故障性 – 失敗したMap, Reduce処理は他のノードで再実行される – 遅いMap, Reduce処理についても同じ • ローカリティ – データのある場所で計算を始めれば、ネットワークを使う 必要がなくなる – Moving Computation is Cheaper Than Moving Data
  30. 30. Hadoopの中身
  31. 31. Hadoopの中身 • Hadoop Distributed File System (HDFS) – GFSのクローン – MapReduceプログラムの入力や出力に使用 • Hadoop MapReduce – MapReduce処理を実現するためのサーバー,ライ ブラリ
  32. 32. Hadoop Distributed File System • Master/Slave アーキテクチャ • ファイルはブロックという単位に分割して保存 • NameNode – Master – ファイルのメタデータ(パス・権限など)を管理 • DataNode – Slave – 実際のデータ(ブロックを管理)
  33. 33. From: http://hadoop.apache.org/core/docs/current/hdfs_design.html
  34. 34. Hadoop MapReduce • Master/Slave アーキテクチャ • JobTracker – Master – JobをTaskに分割し、Taskを各TaskTrackerに分配 • Job: MapReduceプログラムの実行単位 • Task: MapTask, ReduceTask – 全てのTaskの進行状況を監視し、死んだり遅れたりしたTaskは 別のTaskTrackerで実行させる • TaskTracker – Slave – JobTrackerにアサインされたTaskを実行 • 実際の計算処理を行う
  35. 35. MapReduce Processing JobTracker TaskTracker
  36. 36. Mapフェーズ • 分割された入力を読み込み、mapプログラムを動かす • Partitioner(通常はHash)を使用して宛先を決定 • バッファサイズが閾値を越えたらメモリ上でソートして ディスクに書き出す • すべてが終わったらソートされたものをさらに外部マー ジソート Reducer1宛て (k, v) Reducer2宛て
  37. 37. Reduceフェーズ • Mapフェーズの出力をフェッチ • メモリ上でキー毎にまとめあげる • Reduceプログラムを動かす • 出力をHDFSに書き出し – Amazon S3などにも書き出せる
  38. 38. Hadoopを取り巻く環境
  39. 39. 概要 • Hadoopを扱いやすくするミドルウェア – Pig – Hive Pig,Hive – HBase HBase • MapReduce+RDBMS MapReduce – HadoopDB HDFS
  40. 40. Pig • Pig Latinという専用言語で簡単にDWH的な処 理を書けるようにしたミドルウェア – Javaを使用せずに、SQL的な言語でMapReduce処 理を記述する事が出来る – Googleでは、同様にSawzallというスクリプト言語 で、MapReduce処理が簡単に書けるようになって いる • Yahoo!が開発 • データのロード・結合やフィルタ処理を楽に書 ける
  41. 41. Hive • Pigと同じく、SQLのような言語(HiveQL)で処理 を記述することができる – Facebookが独自に開発 • Join,Group Byといった操作を、SQLであたかも 扱っているように書くことが可能 • Facebookでは、95%のMapReduceジョブが、 HiveQLプログラムになっている
  42. 42. HBase • BigTableのクローン • HDFSは巨大なファイルを扱うのは苦手だが、 細かいデータを大量に扱う操作は苦手 • 細かい粒度・低レイテンシなデータアクセスを 可能にするための分散データベース – 同じ分野のソフトウェアとして、HyperTable • Telanium.Inc. 小宮山様のプレゼンに登場予定
  43. 43. HadoopDB • Hadoopは、バッチ処理が得意 • OLAP的な処理はRDBMSが得意 • 2つをくっつけて、大量データ・非構造的なデ ータをHadoopで処理し、対話的なBI処理は RDBMSに任せる
  44. 44. RDBMSとの共存 • RDBMSとHadoopは競合するものではない • 商用製品でもMapReduceとRDBMSのハイブリ ッドなものがでてきた – Vertica
  45. 45. まとめ
  46. 46. まとめ • Hadoopの概要 • MapReduceプログラミングモデル • Hadoopの中身・アーキテクチャ • Hadoopを取り巻く環境

×