バッチ処理
前提知識
バッチ処理とは、ひとまとまりのデータを一括して処理する方式である。
利用用途
- DWH から取得したデータを ETL (Extract/Transform/Load, 抽出/変換・加工/ロード) に通して集計する。
- 複数の画像ファイルに対してリサイズや変換, クレジット表記などの編集操作を一括で行う。
- ファイル形式を変換する。
利点
- 処理のタイミングをリソースがあまり忙しくないの時間帯 (ex. 深夜) にシフトできる。
MapReduce
MapReduce は膨大なデータセットに対して並列化可能な処理を行うためのフレームワークである。 MapReduce の処理は、基本的に以下のステップから構成される。
- プライマリノードは、入力データを細かい単位に分割し、複数のバックアップノードに割り当てる。 (map)
- バックアップノードは、受け取った入力データの分割を処理する。
- バックアップノードは、処理したデータの出力を、データのキーによって分割して保存する。 (shuffle)
- プライマリノードは、バックアップノードから受け取った処理結果を何らかの方法で集約する。 (reduce)
上記のバックアップノードでの処理は完全に独立しており、理論的には並列実行できる。
また、一部のバックアップノードで障害が発生した場合においても、入力データが利用可能である限りは処理を再スケジュールして実行させることができる。
Spark
Spark は、RDD (resilient distributed dataset) という分散された読み込み専用の入力データを中心とするプログラミングインターフェイスを提供する。
Spark は、MapReduce で map/reduce に分解できない、ループ内で複数回データセットを参照するような対話的/探索的データ処理に向いている。
Hadoop
Hadop は多くのノードを含むネットワークと分散ファイルシステムを管理し、膨大なデータセットを処理するためのソフトウェアフレームワークである。
Hadoop は下記に示すコンポーネントから構成される。
- 分散ファイルシステム
- リソースマネージャ
- 処理フレームワーク
分散ファイルシステム
Hadoop 標準の分散ファイルシステムは HDFS である。
HDFS
HDFS (Hadoop Distributed File System) は下記のような特徴をもつ。
- プライマリ/バックアップ型
- ファイルとブロックの対応関係を管理する NameNode (プライマリ)
- 実データのブロックを保持する DataNode (バックアップ)
- レプリケーション機能 (標準のレプリケーション数は 3)
リソースマネージャ
リソースマネージャは、計算リソースの管理やジョブのスケジューリングを行う。
Hadoop 標準のリソースマネージャは YARN (Yet Another Resource Negotiator) である。
処理フレームワーク
Hadoop 標準の処理フレームワークは MapReduce である。 MapReduce の代わりに Spark を使うこともできる。
ラムダアーキテクチャ
ラムダアーキテクチャ (lambda architecture) は、ストリーム処理とバッチ処理の利点を両立しつつ、膨大な量のデータを処理するためのアーキテクチャである。
バッチレイヤー
バッチレイヤー (batch layer) は分散処理を用いて膨大な量のデータを処理する。 バッチレイヤーはすべてのデータを処理して完全で正確なビューを作成することに特化している。
ビューに含まれる不完全もしくは不正確なデータは、バッチレイヤーが完全なデータから再計算したビューを上書きすることによって修正される。
スピードレイヤー
スピードレイヤー (speed layer) はリアルタイムにデータを処理し、最新のデータからリアルタイムビューを作成する。 スピードレイヤーは、スループットを犠牲にしてレイテンシを最小化することに特化している。
リアルタイムビューは不完全で不正確なものでもよい。 それらは前述のバッチレイヤーの処理によって結果的に解消される。
スピードレイヤーは必然的に、バッチレイヤーのレイテンシが引き起こすデータのラグを埋める責務をもつ。
サービングレイヤー
サービングレイヤー (serving layer) は、バッチレイヤーやスピードレイヤーによって作られたビューを用いて、アドホックなクエリに応答する。
参考文献
- 西田 圭介, ビッグデータを支える技術, 2017
- Wikipedia, Lambda architecture
- Wikipedia, Apache Hadoop
- Wikipedia, MapReduce
- Wikipedia, MapReduce
- Wikipedia, Apache Spark