MapReduceとは
大規模データを解析する際によくある課題として、メモリの工夫や計算時間の短縮が挙げられます。大規模なデータセットを解析するための機能のひとつであるMapReduce は、フィルター処理や統計などの一般的な解析手法をコンピュータのメモリに収まりきらないようなビッグデータに適用するためのプログラミング手法です。MapReduce の仕組みはシンプルです。datastore を使用して大きなデータを小さいチャンクに分け、それぞれのチャンクごとに2つの解析ステップを行います。その2つの解析ステップが Map フェーズと Reduce フェーズです。Map フェーズでそれぞれのチャンクに対してデータの書式設定や前処理を行った上で、Reduce フェーズですべての結果を集約します。
例えば、文字カウントにMapReduceを適用する状況を考えます。Mapフェーズで入力である文章セットをひとつずつの単語に分割し、それぞれの単語(key)に対する値(value)のペアを作成します。Mapフェーズの段階では重複する単語があっても統合せずに1としておきます。そのkeyとvalueのペアを元に、Reduce フェーズで各チャンクのペア情報を統合します。
MapReduce を文字カウントに適用した例
MapReduce を使用せずにワードカウントを行おうとすると、階層のあるループ処理などを使う必要があり、処理のためのコードが複雑になる上に膨大な計算時間がかかってしまいます。
さらに、MapReduce では大規模な計算をチャンクに分割することで、計算できない規模の計算を行うことや、並列計算の使用を可能にします。このような並列化されたアルゴリズムである MapReduce を実行することで、デスクトップの処理リソースをより効率的に利用することが可能です。また、アルゴリズムの変更なしに、HPC 環境に展開することもできます。
MapReduceを使用したデータ解析のワークフロー
MapReduce を使用したデータ解析は以下のような手順をふみます。
- 解析対象データをdatastore関数で読み込み
- Map 関数および Reduce 関数を作成
- 作成した Map 関数および Reduce 関数を、MapReduce関数 を使用して実行
Map 関数、Reduce 関数はそれぞれ Map フェーズと Reduce フェーズに行われる処理を記した関数で、ユーザー側で作成する必要があります。Map 関数は、全体の中の一部のデータセットから、datastore のチャンクごとの計算結果を中間オブジェクトとして返します。Reduce 関数は、Map関数の出力である各チャンクの中間オブジェクトを統合し、全体での結果を出力します。
MapReduce で必要な Map 関数と Reduce 関数の作成については、MapReduce でよく行われる処理のパターンがあります。MATLAB® に付属するMapReduce の簡単なデザインパターンのサンプルを利用することで、プロトタイプを迅速に作成することができます。これらの例では、MapReduce を使用した単純な平均値計算から機械学習アルゴリズムであるロジスティック回帰モデルの近似などを含んでいます。
デスクトップ環境での MapReduce の使用
MapReduce プログラミング手法を使用して、デスクトップで大規模データセットの調査と解析を行えます。デスクトップ環境でMATLABを使ってMapReduceを実行するためには、Parallel Computing Toolbox™ を使用します。また、デスクトップ環境でHadoop 環境に展開するためのプロトタイプを作成することも可能です。MapReduce はテキストベースのデータのみではなく、画像データも扱うことが可能です。この場合には画像に特化した ImageDatastore 関数で datastoreを作成します。また、Database Toolbox™と組み合わせて大規模データベースを MapReduceで解析することも可能です。データベースに特化した datastore として DatabaseDatastore関数が用意されています。
Hadoop環境での MapReduce の使用
MATLAB のMapReduce関数は配列ベースの解析向けに最適化されていますが、Hadoop MapReduce と完全な互換性があるため、作成した MapReduce ベースのアルゴリズムを Hadoop MapReduce フレームワークで実行することが可能です。MapReduce の計算のスケールアップとして、以下のようなMapReduceの高速化と展開を行うことができます。
MATLAB Parallel Server™ により、MATLAB MapReduce ベースのアルゴリズムを既存の Hadoop MapReduce と共存して実行し、Hadoop に格納されているデータの調査と解析を行います。
クラスタを利用する2つの方法
MapReduce ベースのアルゴリズムをパッケージ化して汎用 Hadoop システムに展開
MATLAB Compiler™ により、MATLAB MapReduce ベースのアルゴリズムのアプリケーションとライブラリを作成し、MATLAB がインストールされていない汎用環境の Apache Hadoop インスタンスに展開します。
MapReduceコードをHadoop 環境に配布するためのアプリケーションやライブラリを作成するHadoop Compiler の画面。少ないステップで展開することができる。