Hadoop入門

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

×