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入門

株式会社 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を取り巻く環境
Upcoming SlideShare
Loading in …5
×

Hadoop入門

48,146 views

Published on

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

Published in: Technology

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を取り巻く環境

×