よんログ

バッチ処理

前提知識


バッチ処理とは、ひとまとまりのデータを一括して処理する方式である。

利用用途

  • DWH から取得したデータを ETL (Extract/Transform/Load, 抽出/変換・加工/ロード) に通して集計する。
  • 複数の画像ファイルに対してリサイズや変換, クレジット表記などの編集操作を一括で行う。
  • ファイル形式を変換する。

利点

  • 処理のタイミングをリソースがあまり忙しくないの時間帯 (ex. 深夜) にシフトできる。

MapReduce

MapReduce は膨大なデータセットに対して並列化可能な処理を行うためのフレームワークである。 MapReduce の処理は、基本的に以下のステップから構成される。

  1. プライマリノードは、入力データを細かい単位に分割し、複数のバックアップノードに割り当てる。 (map)
  2. バックアップノードは、受け取った入力データの分割を処理する。
  3. バックアップノードは、処理したデータの出力を、データのキーによって分割して保存する。 (shuffle)
  4. プライマリノードは、バックアップノードから受け取った処理結果を何らかの方法で集約する。 (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) は、バッチレイヤーやスピードレイヤーによって作られたビューを用いて、アドホックなクエリに応答する。

参考文献