地图还原

地图还原とは

大規模データを解析する際によくある課題として、メモリの工夫や計算時間の短縮が挙げられます。大規模なデータセットを解析するための機能のひとつである地图还原は、フィルター処理や統計などの一般的な解析手法をコンピュータのメモリに収まりきらないようなビッグデータに適用するためのプログラミング手法です。地图还原の仕組みはシンプルです。数据存储を使用して大きなデータを小さいチャンクに分け、それぞれのチャンクごとに2つの解析ステップを行います。その2つの解析ステップが 地图フェーズと 减少フェーズです。地图フェーズでそれぞれのチャンクに対してデータの書式設定や前処理を行った上で、减少フェーズですべての結果を集約します。

例えば、文字カウントに地图还原を適用する状況を考えます。地图フェーズで入力である文章セットをひとつずつの単語に分割し、それぞれの単語(关键)に対する値(价值)のペアを作成します。地图フェーズの段階では重複する単語があっても統合せずに1.としておきます。その钥匙と价值のペアを元に、减少フェーズで各チャンクのペア情報を統合します。

地图还原を文字カウントに適用した例

地图还原を使用せずにワードカウントを行おうとすると、階層のあるループ処理などを使う必要があり、処理のためのコードが複雑になる上に膨大な計算時間がかかってしまいます。

さらに、地图还原では大規模な計算をチャンクに分割することで、計算できない規模の計算を行うことや、並列計算の使用を可能にします。このような並列化されたアルゴリズムである 地图还原を実行することで、デスクトップの処理リソースをより効率的に利用することが可能です。また、アルゴリズムの変更なしに、高性能混凝土環境に展開することもできます。

地图还原を使用したデータ解析のワークフロー

地图还原を使用したデータ解析は以下のような手順をふみます。

  1. 解析対象データを数据存储関数で読み込み
  2. 地图関数および减少関数を作成
  3. 作成した 地图関数および 减少関数を、地图还原関数を使用して実行

地图関数、减少関数はそれぞれ 地图フェーズと 减少フェーズに行われる処理を記した関数で、ユーザー側で作成する必要があります。地图関数は、全体の中の一部のデータセットから、数据存储のチャンクごとの計算結果を中間オブジェクトとして返します。减少関数は、地图関数の出力である各チャンクの中間オブジェクトを統合し、全体での結果を出力します。

地图还原で必要な 地图関数と 减少関数の作成については、地图还原でよく行われる処理のパターンがあります。MATLAB®に付属する地图还原の簡単なデザインパターンのサンプルを利用することで、プロトタイプを迅速に作成することができます。これらの例では、地图还原を使用した単純な平均値計算から機械学習アルゴリズムであるロジスティック回帰モデルの近似などを含んでいます。


デスクトップ環境での 地图还原の使用

地图还原プログラミング手法を使用して、デスクトップで大規模データセットの調査と解析を行えます。デスクトップ環境でMATLABを使って地图还原を実行するためには、并行计算工具箱™を使用します。また、デスクトップ環境でHadoop環境に展開するためのプロトタイプを作成することも可能です。地图还原はテキストベースのデータのみではなく、画像データも扱うことが可能です。この場合には画像に特化した图像数据存储関数で 数据存储を作成します。また、数据库工具箱™と組み合わせて大規模データベースを 地图还原で解析することも可能です。データベースに特化した 数据存储として数据库数据存储関数が用意されています。

Hadoop環境での 地图还原の使用

MATLABの地图还原関数は配列ベースの解析向けに最適化されていますが、Hadoop MapReduceと完全な互換性があるため、作成した 地图还原ベースのアルゴリズムを Hadoop MapReduceフレームワークで実行することが可能です。地图还原の計算のスケールアップとして、以下のような地图还原の高速化と展開を行うことができます。

MATLAB并行服务器™により、MatlabMapReduceベースのアルゴリズムを既存の Hadoop MapReduceと共存して実行し、Hadoopに格納されているデータの調査と解析を行います。

クラスタを利用する2つの方法

地图还原ベースのアルゴリズムをパッケージ化して汎用 Hadoopシステムに展開

MATLAB编译器™により、MatlabMapReduceベースのアルゴリズムのアプリケーションとライブラリを作成し、MATLABがインストールされていない汎用環境の ApacheHadoopインスタンスに展開します。

地图还原コードをHadoop環境に配布するためのアプリケーションやライブラリを作成するHadoop编译器の画面。少ないステップで展開することができる。