hadoop入門

46
Hadoop入門 株式会社 Preferred Infrastructure 西川 徹

Upload: preferred-infrastructure-preferred-networks

Post on 28-May-2015

44.002 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Hadoop入門

Hadoop入門

株式会社 Preferred Infrastructure

西川徹

Page 2: Hadoop入門

とは?

• Googleの基盤ソフトウェアのクローン

– Google File System, MapReduce

• Yahoo Research の Doug Cutting氏が開発

–元々はLuceneのサブプロジェクト

– Apache Project

• Javaで記述!

Page 3: Hadoop入門

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

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

弊社による取り組み

• OSS分散システム「Hadoop」解析資料

– NTTレゾナント様と共同で調査・公開

• Googleの基盤システムと比較し、機能的には遜色が無い事を確認

– GFS/HDFSの機能比較

– MapReduce/Hadoop Mapreduceの機能比較

– ソースコード構造の解析

–ベンチマーク結果

Page 6: Hadoop入門

性能

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

Hadoop,MapReduce登場の背景

Page 8: Hadoop入門

問題

• インターネットの爆発的普及により、非常に大規模なデータが蓄積されている–例えばWebページのサイズを考えてみる

• 200億ページ * 20KB = 400 TB

– Disk読み込み性能は50MB/sec (SATA)• 1台では読み込むだけでも約100日

• 保存するだけでも500Gのディスクが1000個程度必要

• このデータを効率的に処理したい

Page 9: Hadoop入門

解決方法

• お金

– とにかく大量のマシンを用意

– 1000台マシンがあれば1台で400G処理すればok

–読み込むのに8000秒程度で済む

Page 10: Hadoop入門

お金だけでは解決しない

• プログラミングが非常に困難になる–プロセス起動

–プロセス監視

–プロセス間通信

–デバッグ

–最適化

–故障時への対応

• しかも、新しいプログラムを作る度にこれらの問題をいちいち実装する必要がある

うはーめんどくせー!

Page 11: Hadoop入門

既存の分散/並列プログラミング環境

• MPI (Message Passing Interface)–並列プログラミングのためのライブラリ

• スパコンの世界では主流

–プログラマは各プロセスの挙動を記述• 通信プリミティブ(Send, Recv, All-to-All)が提供されており、それを用いてデータ通信を実現

–利点• 通信パターンなどをプログラマがコントロールでき、問題に対して最適なプログラムを記述する事ができる

Page 12: Hadoop入門

MPIの問題点

• 問題点–耐障害性への考慮が少ない

• アプリケーションが独自にチェックポイント機能を実装

• 1万台以上の環境で計算するには耐えられない– 1台が1000日程度で壊れるとすると、1日で10台程度壊れる

– 壊れる度にチェックポイントから戻すとかやってらんない

– RAID組んでもそのうち壊れるので一緒

–通信パターンなどを記述する作業が多くなり、実際のアルゴリズムを記述するのにたどり着くまで時間がかかる

Page 13: Hadoop入門

そこでMapReduce

• 大体の大規模データ処理を行う問題に特化したプログラミングモデル– アルゴリズムの記述のみにプログラマが集中できる– ただし世の中の問題全てに対して最適なモデルではない

• ライブラリ側で面倒な事を全て担当– 自動的に処理を分散/並列化– ロードバランシング– ネットワーク転送・ディスク使用効率化– 耐障害性の考慮

• 1ノードで失敗したら違う場所でやりなおせばいいよね

– MapReduceが賢くなれば、それを使う全てのプログラムが賢くなる!

Page 14: Hadoop入門

MapReduce型の処理

• WordCount

• Grep

• Sort (適切なPartition関数を選択する必要)

• Log Analysis

• Web Graph Generation

• Inverted Index Construction

• Machine Learning

– NaiveBayes, K-means, Expectation Maximization, etc.

Page 15: Hadoop入門

Googleでの使用率

Page 16: Hadoop入門

MapReduceプログラミングモデル

Page 17: Hadoop入門

MapReduceの実行フロー

Data Map

Data Map

Data Map

Reduce

Reduce

Data

Data

Shuffle

Page 18: Hadoop入門

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

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

例: ワードカウント

Data Map

Data Map

Data Map

Reduce

Reduce

Data

Data

Shuffle

foo foo foobar bar buzz

入力文書: doc1

Page 21: Hadoop入門

例: ワードカウント

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

例: ワードカウント

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

例: ワードカウント

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

例: ワードカウント

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

例: ワードカウント

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

例: ワードカウント

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

例: ワードカウント

Data Map

Data Map

Data Map

Reduce

Reduce

Data

Data

foo foo foobar bar buz

入力文書: doc1

bar: 2buz: 1

foo: 3

Page 28: Hadoop入門

例: ワードカウント

• 擬似コード

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

MapReduceの特徴

• データ通信– 各Map処理、Reduce処理は完全に並列に実行可能

– マシンを増やせばその分処理能力が増える

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

– 遅いMap, Reduce処理についても同じ

• ローカリティ

– データのある場所で計算を始めれば、ネットワークを使う必要がなくなる

– Moving Computation is Cheaper Than Moving Data

Page 30: Hadoop入門

Hadoopの中身

Page 31: Hadoop入門

Hadoopの中身

• Hadoop Distributed File System (HDFS)

– GFSのクローン

– MapReduceプログラムの入力や出力に使用

• Hadoop MapReduce

– MapReduce処理を実現するためのサーバー,ライブラリ

Page 32: Hadoop入門

Hadoop Distributed File System

• Master/Slave アーキテクチャ

• ファイルはブロックという単位に分割して保存

• NameNode– Master

– ファイルのメタデータ(パス・権限など)を管理

• DataNode– Slave

– 実際のデータ(ブロックを管理)

Page 33: Hadoop入門

From: http://hadoop.apache.org/core/docs/current/hdfs_design.html

Page 34: Hadoop入門

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

MapReduce Processing

JobTracker

TaskTracker

Page 36: Hadoop入門

Mapフェーズ

• 分割された入力を読み込み、mapプログラムを動かす

• Partitioner(通常はHash)を使用して宛先を決定

• バッファサイズが閾値を越えたらメモリ上でソートしてディスクに書き出す

• すべてが終わったらソートされたものをさらに外部マージソート

(k, v)

Reducer1宛て

Reducer2宛て

Page 37: Hadoop入門

Reduceフェーズ

• Mapフェーズの出力をフェッチ

• メモリ上でキー毎にまとめあげる

• Reduceプログラムを動かす

• 出力をHDFSに書き出し

– Amazon S3などにも書き出せる

Page 38: Hadoop入門

Hadoopを取り巻く環境

Page 39: Hadoop入門

概要

• Hadoopを扱いやすくするミドルウェア

– Pig

– Hive

– HBase

• MapReduce+RDBMS

– HadoopDBHDFS

MapReduce

Pig,Hive

HBase

Page 40: Hadoop入門

Pig

• Pig Latinという専用言語で簡単にDWH的な処理を書けるようにしたミドルウェア

– Javaを使用せずに、SQL的な言語でMapReduce処理を記述する事が出来る

– Googleでは、同様にSawzallというスクリプト言語で、MapReduce処理が簡単に書けるようになっている

• Yahoo!が開発

• データのロード・結合やフィルタ処理を楽に書ける

Page 41: Hadoop入門

Hive

• Pigと同じく、SQLのような言語(HiveQL)で処理を記述することができる

– Facebookが独自に開発

• Join,Group Byといった操作を、SQLであたかも扱っているように書くことが可能

• Facebookでは、95%のMapReduceジョブが、HiveQLプログラムになっている

Page 42: Hadoop入門

HBase

• BigTableのクローン

• HDFSは巨大なファイルを扱うのは苦手だが、細かいデータを大量に扱う操作は苦手

• 細かい粒度・低レイテンシなデータアクセスを可能にするための分散データベース

–同じ分野のソフトウェアとして、HyperTable

• Telanium.Inc. 小宮山様のプレゼンに登場予定

Page 43: Hadoop入門

HadoopDB

• Hadoopは、バッチ処理が得意

• OLAP的な処理はRDBMSが得意

• 2つをくっつけて、大量データ・非構造的なデータをHadoopで処理し、対話的なBI処理はRDBMSに任せる

Page 44: Hadoop入門

RDBMSとの共存

• RDBMSとHadoopは競合するものではない

• 商用製品でもMapReduceとRDBMSのハイブリッドなものがでてきた

– Vertica

Page 45: Hadoop入門

まとめ

Page 46: Hadoop入門

まとめ

• Hadoopの概要

• MapReduceプログラミングモデル

• Hadoopの中身・アーキテクチャ

• Hadoopを取り巻く環境