Main Content

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

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

ブレークポイントの設定

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

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

edit maxArrivalDelayMapper.m

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

mapreduce の実行

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

mapreducer(0);
MaxMapReduceExample

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

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

map 関数のステップ実行

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

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

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

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

  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 のデバッグ表示では、アクティブなキーと、取得される値が残っているかどうかが示されます。

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

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

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

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

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

参考

関連するトピック