MapReduce アルゴリズムのデバッグ
この例では、簡単なサンプル ファイル MaxMapReduceExample.m を使用して、MATLAB® で mapreduce アルゴリズムをデバッグする方法を説明します。デバッグにより、mapreduce 実行の異なるフェーズ間のデータの移動に従い、すべての中間変数の状態を検査できます。
まず、次の関数の内容を現在のディレクトリに別個のファイルとして保存します。
ブレークポイントの設定
問題があると思われる変数値を調べられるように、map 関数または reduce 関数のファイルに 1 つ以上のブレークポイントを設定できます。詳細については、ブレークポイントを設定するを参照してください。
ファイル maxArrivalDelayMapper.m を開きます。
edit maxArrivalDelayMapper.m9 行目にブレークポイントを設定します。このブレークポイントにより、キーと値のペアを intermKVStore という名前の中間 KeyValueStore オブジェクトに追加する各 map 関数の呼び出しの直前に、mapreduce の実行が一時停止します。

mapreduce の実行
mapreduce のサンプル ファイル MaxMapReduceExample.m を実行します。このアルゴリズムが並列実行されないことを確実にするため、mapreducer(0) を指定します。Parallel Computing Toolbox™ を使用した mapreduce の並列実行ではブレークポイントが無視されるためです。
mapreducer(0); MaxMapReduceExample
MATLAB は、map 関数内のブレークポイントに遭遇すると、ファイルの実行を停止します。実行の一時停止中、map 関数内の様々な変数名の上にホバーするか、コマンド ラインに変数名を入力して、値を検査できます。
この場合の表示は、intermKVStore にまだキーと値のペアがないことを示しています。

map 関数のステップ実行
ブレークポイントを超えて続行します。
dbstepを使用して、1 行ずつ実行したり、dbcontを使用して MATLAB が別のブレークポイントに遭遇するまで実行を続行したりできます。あるいは、[エディター] タブの
[ステップ] または
[続行] をクリックできます。使用可能なすべてのオプションの詳細については、MATLAB コード ファイルのデバッグを参照してください。この場合、
dbstepを使用 (または
[ステップ] をクリック) して 9 行目のみを実行します。すると、キーと値のペアが intermKVStoreに追加されます。intermKVStoreの新しい表示を検査します。
次に
dbcontを使用 (または
[続行] をクリック) して mapreduceの実行を続行します。map 関数を "次に" 呼び出したとき、MATLAB は再び 9 行目で停止します。intermKVStoreの新しい表示は、キーと値のペアが含まれないことを示しています。これは、表示は現在の map 関数 (または reduce 関数) への呼び出しで追加された "最新の" キーと値のペアのみを表示するためです。dbstepを使用 (または
[ステップ] をクリック) して再び 9 行目を超えてステップ実行し、次のキーと値のペアを intermKVStoreに追加し、新しい表示で変数を検査します。MATLAB には、map 関数の現在の呼び出し中に追加されたキーと値のペアのみ表示されます。
ブレークポイントを削除し、ファイル
maxArrivalDelayMapper.mを閉じて map 関数のデバッグを完了します。
reduce 関数のステップ実行
同じプロセスを使用して、reduce 関数にブレークポイントを設定し、ステップ実行を行うことができます。この例の reduce 関数は
maxArrivalDelayReducer.mです。このファイルを編集用に開きます。edit maxArrivalDelayReducer.m10 行目と 13 行目に 1 つずつ、2 つのブレークポイントを設定します。これにより、
ValueIteratorと出力outKVStoreに追加された最終的なキーと値のペアを検査できます。メインのサンプル ファイルを実行します。
MaxMapReduceExample
10 行目のブレークポイントに到達すると、このサンプルの実行が一時停止します。
ValueIteratorのデバッグ表示では、アクティブなキーと、取得される値が残っているかどうかが示されます。
次に、10 行目のブレークポイントを削除し、
dbcontを使用 (または
[続行] をクリック) して、次のブレークポイント (13 行目) に到達するまでサンプルの実行を続行します。この reduce 関数は ValueIteratorの新しい各値と大域的最大値との比較を継続するため、mapreduceの実行はoutKVStoreにキーと値のペアを追加することで終了します。dbstepを使用 (または
[ステップ] をクリック) して 13 行目のみ実行します。outKVStoreの表示には、mapreduceから最終的な解答として返される大域的最大値が示されます。
次に、
dbcontを使用 (または
[続行] をクリック) して実行を進め、サンプルの実行が終了できるようにします。mapreduceは最終的な結果を返します。Map 100% Reduce 100% ans = Key Value _________________ ______ 'MaxArrivalDelay' [1014]
MATLAB でのデバッグについての詳しいガイドは、デバッグと解析を参照してください。
