Main Content

MapReduce アルゴリズムのデバッグ

この例では、簡単なサンプル ファイル MaxMapReduceExample.m を使用して、MATLAB®mapreduce アルゴリズムをデバッグする方法を説明します。デバッグにより、mapreduce 実行の異なるフェーズ間のデータの移動に従い、すべての中間変数の状態を検査できます。

まず、次の関数の内容を現在のディレクトリに別個のファイルとして保存します。

 MaxMapReduceExample.m

 maxArrivalDelayMapper.m

 maxArrivalDelayReducer.m

ブレークポイントの設定

問題があると思われる変数値を調べられるように、map 関数または reduce 関数のファイルに 1 つ以上のブレークポイントを設定できます。詳細は、ブレークポイントを設定するを参照してください。

ファイル maxArrivalDelayMapper.m を開きます。

edit maxArrivalDelayMapper.m

9 行目にブレークポイントを設定します。このブレークポイントにより、キーと値のペアを intermKVStore という名前の中間 KeyValueStore オブジェクトに追加する各 map 関数の呼び出しの直前に、mapreduce の実行が一時停止します。

Screenshot of map function file with breakpoint added on line that calls the add method.

mapreduce の実行

mapreduce のサンプル ファイル MaxMapReduceExample.m を実行します。このアルゴリズムが並列実行されないことを確実にするため、mapreducer(0) を指定します。Parallel Computing Toolbox™ を使用した mapreduce の並列実行ではブレークポイントが無視されるためです。

mapreducer(0);
MaxMapReduceExample

MATLAB は、map 関数内のブレークポイントに遭遇すると、ファイルの実行を停止します。実行の一時停止中、map 関数内の様々な変数名の上にホバーするか、コマンド ラインに変数名を入力して、値を検査できます。

この場合の表示は、intermKVStore にまだキーと値のペアがないことを示しています。

Screenshot of hover text showing KeyValueStore with no key-value pairs.

map 関数のステップ実行

  1. ブレークポイントを超えて続行します。dbstep を使用して、1 行ずつ実行したり、dbcont を使用して MATLAB が別のブレークポイントに遭遇するまで実行を続行したりできます。あるいは、[エディター] タブの [ステップ] または [続行] をクリックできます。使用可能なすべてのオプションについての詳細は、MATLAB コード ファイルのデバッグを参照してください。

    この場合、dbstep を使用 (または [ステップ] をクリック) して 9 行目のみを実行します。すると、キーと値のペアが intermKVStore に追加されます。intermKVStore の新しい表示を検査します。

    Screenshot of hover text showing KeyValueStore with one key-value pair.

  2. 次に dbcont を使用 (または [続行] をクリック) して mapreduce の実行を続行します。map 関数を "次に" 呼び出したとき、MATLAB は再び 9 行目で停止します。intermKVStore の新しい表示は、キーと値のペアが含まれないことを示しています。これは、表示は現在の map 関数 (または reduce 関数) への呼び出しで追加された "最新の" キーと値のペアのみを表示するためです。

  3. dbstep を使用 (または [ステップ] をクリック) して再び 9 行目を超えてステップ実行し、次のキーと値のペアを intermKVStore に追加し、新しい表示で変数を検査します。MATLAB には、map 関数の現在の呼び出し中に追加されたキーと値のペアのみ表示されます。

    Screenshot of hover text showing KeyValueStore with multiple key-value pairs. The display shows the last key-value pair added.

  4. ブレークポイントを削除し、ファイル maxArrivalDelayMapper.m を閉じて map 関数のデバッグを完了します。

reduce 関数のステップ実行

  1. 同じプロセスを使用して、reduce 関数にブレークポイントを設定し、ステップ実行を行うことができます。この例の reduce 関数は maxArrivalDelayReducer.m です。このファイルを編集用に開きます。

    edit maxArrivalDelayReducer.m
  2. 10 行目と 13 行目に 1 つずつ、2 つのブレークポイントを設定します。これにより、ValueIterator と出力 outKVStore に追加された最終的なキーと値のペアを検査できます。

  3. メインのサンプル ファイルを実行します。

    MaxMapReduceExample
  4. 10 行目のブレークポイントに到達すると、このサンプルの実行が一時停止します。ValueIterator のデバッグ表示では、アクティブなキーと、取得される値が残っているかどうかが示されます。

    Screenshot of hover text showing ValueIterator with an active key and one or more values available.

  5. 次に、10 行目のブレークポイントを削除し、dbcont を使用 (または [続行] をクリック) して、次のブレークポイント (13 行目) に到達するまでサンプルの実行を続行します。この reduce 関数は ValueIterator の新しい各値と大域的最大値との比較を継続するため、mapreduce の実行は outKVStore にキーと値のペアを追加することで終了します。

  6. dbstep を使用 (または [ステップ] をクリック) して 13 行目のみ実行します。outKVStore の表示には、mapreduce から最終的な解答として返される大域的最大値が示されます。

    Screenshot of hover text showing KeyValueStore with one key-value pair added.

  7. 次に、dbcont を使用 (または [続行] をクリック) して実行を進め、サンプルの実行が終了できるようにします。mapreduce は最終的な結果を返します。

    Map 100% Reduce 100%
    
    ans = 
    
               Key           Value 
        _________________    ______
    
        'MaxArrivalDelay'    [1014]

MATLAB でのデバッグについての詳しいガイドは、デバッグと解析を参照してください。

参考

関連するトピック