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