50
Data-Intensive Text Processing with MapReduce (ch1, ch2) 2010/09/23 shiumachi http://d.hatena.ne.jp/shiumachi/ http://twitter.com/shiumachi

Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Embed Size (px)

DESCRIPTION

This document is written about "Data-Intensive Text Processing with MapReduce" Chapter 1 and 2. It includes basic topics about MapReduce programming model. Next document will be more advanced topics.

Citation preview

Page 1: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Data-Intensive Text Processing with MapReduce

(ch1, ch2)

2010/09/23shiumachi

http://d.hatena.ne.jp/shiumachi/http://twitter.com/shiumachi

Page 2: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Agenda

● この勉強会について● 1章 イントロダクション● 2章 MapReduce基礎

● 2.1 関数型言語● 2.2 mapper と reducer

● 2.3 実行フレームワーク● 2.4 Partitioner と Combiner

● 2.5 分散ファイルシステム● 2.6 Hadoop クラスタアーキテクチャ

Page 3: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

この勉強会について● Jimmy Lin, Chris Dyer 著の Data-Intensive Text

Processing with MapReduce を読む会です● 全3回ぐらいでやる予定● shiumachi, marqs が交代で各章の解説をします

Page 4: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Chapter 1. Introduction1章 イントロダクション

Page 5: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

この本は?● MapReduceを用いて大量のテキストを処理するためのスケーラブルな方法についての本

● NLP(自然言語処理)、IR(情報検索)についてフォーカスしてる● が、グラフなんかも扱ったりする

● Hadoopをベースに扱ってはいるけどHadoop本ではない● オライリーのHadoop 本でも読んでな [3]

Page 6: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Big Dataの時代!● 我々のデータ蓄積能力は、データ処理能力を大幅に上回っている

● Big Data(数十TB以上)を扱うのは当たり前● そもそも現実世界は Big Data である

● だから現実世界のシステムはこれに立ち向かわなければならない

● Big Data を扱うのは技術がいる● 分散処理、アルゴリズム、etc...

Page 7: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

世界の企業が扱うBig Data

● Googleは2008年時点で20PBをMapReduceで処理してた

● eBayは約10PB

● FaceBookは2010年時点で15PB [1]

Page 8: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

なんで Big Dataを扱うの?● 「そこにデータがあるからだ」● たくさんのデータがあれば、よりよいアルゴリズムを使うことができる

● 現実世界の問題を解決しやすくできる

これで Why は説明した この本の残りは全て How について説明する

Page 9: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

クラウドコンピューティング● かつて「ユーティリティコンピューティング」

と呼ばれていたもの [2]

● ユーティリティコンピューティングの基本コンセプトは、「Everything as a Service」

Page 10: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

IaaS, PaaS, SaaS そして MapReduce

● IaaS とは、物理ハードウェアの抽象化である● PaaS, SaaS も同様の説明ができる● そして MapReduce プログラミングモデルも、大量データ処理を「どのように」処理するかという問題から「どんなデータを」処理するかという問題を分離するための強力な抽象化である

Page 11: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

IaaS, MapReduce

IaaS

ハードウェア ネットワーク

ここで抽象化

MapReduce

計算ノード

ここで抽象化

計算ノード 計算ノード計算ノード

分散処理のマネージャ(リソース管理、ジョブ管理、障害管理、データ管理etc...)

Page 12: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

MapReduceの基本コンセプト● スケール「アウト」、「アップ」じゃないよ● 障害発生は当たり前● データのある場所で処理● シーケンシャルにデータ処理し、ランダムアクセスを避ける

● Ap開発者からシステムレベルの詳細を隠蔽する● シームレスなスケーラビリティ

Page 13: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

MapReduceは何が違うのか?● 世界中で広く採用された、最初の非ノイマン型モデル

● MapReduceは最初の並列処理モデルではない● PRAM, LogP, BSP, etc...

● MapReduceは最後の並列処理モデルではない● 欠点もいろいろある

だからこそこの本で MapReduce を学ぼうはじめよう、我々の冒険を!

Page 14: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Chapter 2. MapReduce Basics2章 MapReduce 基礎

Page 15: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

分割して統治せよDivide and Conquer

● 巨大なデータを扱う問題に対処するには今のところこの方法しかない

● しかし以下の通り、実装は難しい● どうやって巨大な問題を小さなタスクに分割するのか?● どうすれば個々に性質の違うワーカーに対し効率よくタスクを割り当てることができるのか?

● どうすればワーカーが必要なデータを確実に取得できるようになるのか?

● どうすればワーカー間で同期をとることができるのか?● どうすればワーカーの出した結果を別のワーカーと共有できるのか?● ソフトウェア・ハードウェア障害が起きる中でどうすれば上の要件を満たすことができるのか?

Page 16: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

この章で話すこと● MapReduceプログラミングモデルとその下にある分散ファイルシステムについて説明する

● 関数型プログラミング言語について(2.1)● mapper, reducer (2.2)● 実行フレームワークとジョブ (2.3)● partitioner, combiner (2.4)● 分散ファイルシステム (2.5)

● Hadoop クラスタ (2.6)

Page 17: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

2.1 関数型言語

Page 18: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

関数型言語● MapReduceのルーツは関数型言語である● 関数型言語の(ここでの)重要な特徴は2つ

● 高階関数● 関数の引数として関数をとれる

● map, reduce は2 つの有名な高階関数 map, fold からきている

Page 19: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

図2.1 map関数とfold関数map(図のf)はデータの要素を個別に変換するための関数であり、fold(図のg)はその結果を集約処理するための関数であるとも言える

Page 20: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

MapReduceの流れ

1.ユーザ定義の処理を、全ての入力レコードに適用する

2.別のユーザ定義の処理により、1.で出力された中間出力が集約される

これだけ。

Page 21: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

MapReduceのコンセプト

1.MapReduceとはプログラミングモデルである2.MapReduceとは実行フレームワークである3.MapReduceとはプログラミングモデルと実行フレームワークのソフトウェア実装である• Google MapReduce(以下GMR), Hadoop 以外にもたくさんあるよ

• マルチコアCPU用、GPGPU用、CELL用などなど• この本では広く使われているHadoopを中心に扱う

Page 22: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

2.2 mapper と reducer

Page 23: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

MapReduceで扱うデータ構造● MapReduceにおける基本的なデータ構造はキーバリュー型

● といってもキーにもバリューにも型の制約はないので実質好きなデータを使える

● 複雑なデータ構造を使いたければ Protocol Buffers, Thrift, Avro なんかを使えばいい● 日本なら Message Pack とか

● キーバリューで表せるものはたくさんある● ウェブページ = [ ( url, html ) ]

● グラフ構造 = [ ( ノードid, [ 隣接したノードid ] ]

Page 24: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

mapper と reducer

● それぞれ map, reduce を実行するもの● →入力 出力が以下の形になるよう定義する

map: (k1, v1) → [(k2, v2)]reduce: (k2, [v2] ) → [(k3, v3)]

● map と reduce の間の中間データに対し、分散group by の処理を行っている

Page 25: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

図2.2 MapReduceの流れ(簡易版)完全版は後ほど登場

ここでは map → shuffle と sort → reduce という流れを把握すればいい

Page 26: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

おなじみワードカウント● 説明は省略● 後の章でも出てくる

Page 27: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

GMR と Hadoop の違い● GMRはセカンダリソートができるがHadoopはできない● キーでソートしたあとにバリューでソートできないということ( ※しかしHadoopでの手法はHadoop本にも書いてあるぐらいメジャーな方法だと思うのだ

……が ?[3] )

● GMRではreducer中にキーを変更できないがHadoopはできる

Page 28: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

mapper, reducerの制約● 副作用を持つことができること

● mapタスク同士で共通のデータを持つことができる● 関数プログラミングでは不可能

● これにより最適化アルゴリズムを作ったり(Ch.3)、外部ファイルを利用してさらに高度な処理をできるようになる(4.4, 6.5)● 次章からよく出てくる

● 一方で、特に外部リソースを扱う際には競合が発生し、ボトルネックになりやすい

Page 29: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

その他トピック● mapやreduceに恒等関数を使うと、ただソートしたいだけのときなどにも便利

● BigTable や Hbase などの疎かつ分散された多次元マップに対して入出力するのも便利

● 入力なし(あるいはほとんどなし)でMapReduce使う場合もある● piの計算とか

Page 30: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

2.3 実行フレームワーク

Page 31: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

ジョブと実行フレームワーク● ジョブ=mapper のコード + reducer のコード

( + combiner , partitioner ) + 設定パラメータ● Hadoopなどの実行フレームワークは、このジョブを各ノードに投げて計算させる

Page 32: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

実行フレームワークの役割● スケジューリング

● 投機的実行により安定してジョブを完了できる● データ/コードコロケーション

● 基本はデータのあるノードで計算を実行する● しかし、それができない場合はデータが移動する

● 同期● reduce処理はmap処理が全て完了してから開始

● エラー・障害ハンドリング

Page 33: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

2.4 Partitioner と Combiner

Page 34: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Partitioner

● map出力のキーを見て、複数のreducerに振り分ける

● 一番単純な振り分け方はレコードのハッシュをとってmodの結果を使うこと● Hadoop でいう HashPartitioner

● 上記のように、Partitionerによる振り分けは均一ではない● Hadoop ならサンプリングしてデータ量が均一になるようにする

Page 35: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Combiner

● map処理後の中間データに対し、あたかもreducerをかけるように処理する

● 要するに ミニreducer

● データ転送量を大幅に減らすことができる● しかし reducer と互換性がないことに注意

● 入力と出力の型は必ず同じでなければならない、すなわちmap出力の型を維持しなければならない

● Hadoopではさらに以下の制約がある– 何度でも(0回でも!)実行されうる

Page 36: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

図2.4 MapReduceの流れ(完全版)図2.2 に combiner と partitioner を加えたもの。Hadoopの実装とは異なることに注意

Page 37: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

2.5 分散ファイルシステム

Page 38: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

大量データ処理におけるファイルシステム

● 「読んで処理して書く」という基本は同じ● HPCではNAS/SANを使用● ノード数多くなると、ノード間の通信がネックになる● 10GbEやInfinibandを使うと高い

● MapReduceでは分散ファイルシステム(DFS)を使う● 別に必須ではないが、DFS使わないとMRの恩恵はあまり得られない

Page 39: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

DFS?● 別に新しいアイデアじゃない● データは64MBなどの大きめのブロックに分割し、複数にレプリケーションした上で異なるノードに分散配置

● −名前空間はマスタ が管理● Google File System(GFS) では GFS Master● Hadoop Distributed File System(HDFS) では

namenode

Page 40: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

HDFSにおけるデータシーケンス● クライアントはまずネームノードに問い合わせ● データの場所を確認後、スレーブ(データノード)と直接通信

● 図2.5も参照のこと

Page 41: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

図2.5 HDFS名前空間(だけ)はネームノードが管理クライアントはデータノードと直接データのやりとりをする

Page 42: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

レプリケーションファクター● データをどれだけ冗長化するかを示すパラメータ

● Hadoopはデフォルト3

● ノードに障害が起きた場合は、別の生きているノードに残りの2つのデータブロックからコピーし、RFを一定に保つ

● 一方、ノードが復帰しコピーが4つになったら、不要な1ブロックを削除する

Page 43: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

DFSの特徴● そこそこの数の大きなファイル(数GB〜)を扱う● バッチ指向、たくさん読んでたくさん書く

● 低レイテンシよりも持続的な帯域確保が重要● 非POSIX準拠● 不特定多数が扱えるほどの認証機構はない

● Hadoopは一応0.21でKerberosが入ったがExperimental

● コモディティサーバを使うこと前提なので障害→は当たり前 だから自己監視・修復が必須

Page 44: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

DFSの弱点● CAPのC重視

● P(分割耐性)はDFSではどのみち無理● GFS,HDFSはA(可用性)よりC(一貫性)を取った

● マスタサーバはSPOF● ホットスタンバイのマスタを用意したりとか、対策はしっかりとっておこう

● データ通信をするわけじゃないのでボトルネックにはならない

Page 45: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

2.6 Hadoop クラスタアーキテクチャ

Page 46: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

図2.6 Hadoopクラスタでもこの図セカンダリネームノード(チェックポイントノード)がないので現実の構成としては不完全な気がする

Page 47: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Hadoop上でのジョブの流れジョブ実行開始(JobTracker)ジョブをTaskTrackerに配布

Mapタスク実行タスク数はユーザ指定パラメータだけでなく

ブロック数にも依存

Reduceタスク実行ユーザが任意のタスク数を指定可能

● mapやreduceでは外部データを持たせることも可能● 統計データとか辞書読ませたりできる

● 開始時と終了時にフックできるHadoop API が提供されている(Javaのみ)

Page 48: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

参考文献

Page 49: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

1. Facebook has the world's largest Hadoop cluster!, Facebook has the world's largest Hadoop cluster!, http://hadoopblog.blogspot.com/2010/05/facebook-has-worlds-largest-hadoop.html

2. ユーティリティコンピューティング, wikipedia, http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0

3.Hadoop, Tom White, オライリー・ジャパン, 2009

4.

Page 50: Data-Intensive Text Processing with MapReduce(Ch1,Ch2)

Thank you !