バッチ処理とは、ひとまとまりのデータを一括して処理する方式である。
MapReduce は膨大なデータセットに対して並列化可能な処理を行うためのフレームワークである。 MapReduce の処理は、基本的に以下のステップから構成される。
上記のバックアップノードでの処理は完全に独立しており、理論的には並列実行できる。
また、一部のバックアップノードで障害が発生した場合においても、入力データが利用可能である限りは処理を再スケジュールして実行させることができる。
Spark は、RDD (resilient distributed dataset) という分散された読み込み専用の入力データを中心とするプログラミングインターフェイスを提供する。
Spark は、MapReduce で map/reduce に分解できない、ループ内で複数回データセットを参照するような対話的/探索的データ処理に向いている。
Hadop は多くのノードを含むネットワークと分散ファイルシステムを管理し、膨大なデータセットを処理するためのソフトウェアフレームワークである。
Hadoop は下記に示すコンポーネントから構成される。
Hadoop 標準の分散ファイルシステムは HDFS である。
HDFS (Hadoop Distributed File System) は下記のような特徴をもつ。
リソースマネージャは、計算リソースの管理やジョブのスケジューリングを行う。
Hadoop 標準のリソースマネージャは YARN (Yet Another Resource Negotiator) である。
Hadoop 標準の処理フレームワークは MapReduce である。 MapReduce の代わりに Spark を使うこともできる。
ラムダアーキテクチャ (lambda architecture) は、ストリーム処理とバッチ処理の利点を両立しつつ、膨大な量のデータを処理するためのアーキテクチャである。
バッチレイヤー (batch layer) は分散処理を用いて膨大な量のデータを処理する。 バッチレイヤーはすべてのデータを処理して完全で正確なビューを作成することに特化している。
ビューに含まれる不完全もしくは不正確なデータは、バッチレイヤーが完全なデータから再計算したビューを上書きすることによって修正される。
スピードレイヤー (speed layer) はリアルタイムにデータを処理し、最新のデータからリアルタイムビューを作成する。 スピードレイヤーは、スループットを犠牲にしてレイテンシを最小化することに特化している。
リアルタイムビューは不完全で不正確なものでもよい。 それらは前述のバッチレイヤーの処理によって結果的に解消される。
スピードレイヤーは必然的に、バッチレイヤーのレイテンシが引き起こすデータのラグを埋める責務をもつ。
サービングレイヤー (serving layer) は、バッチレイヤーやスピードレイヤーによって作られたビューを用いて、アドホックなクエリに応答する。