主要内容

MapReduce算法调试

此示例显示如何调试您的mapreduceMATLAB算法®使用一个简单的示例文件,MaxMapReduceExample.m.调试使您能够跟踪数据在不同阶段之间的移动mapreduce执行并检查所有中间变量的状态。

设置断点

在map或reduce函数文件中设置一个或多个断点,以便检查您认为问题所在的变量值。有关更多信息,请参见设置断点

打开文件maxArrivalDelayMapper.m

编辑maxArrivalDelayMapper.m

在第9行设置断点。的执行mapreduce如果要在每次调用map函数之前暂停,则向中间函数添加一个键值对KeyValueStore对象,名为intermKVStore

执行mapreduce

运行mapreduce示例文件MaxMapReduceExample.m.指定mapreduce (0)保证算法不并行运行,自并行执行mapreduce使用并行计算工具箱™忽略断点。

mapreduce (0);MaxMapReduceExample

MATLAB在遇到map函数中的断点时停止文件的执行。在执行暂停期间,您可以将鼠标悬停在map函数中的不同变量名上,或者在命令行中键入其中一个变量名来检查值。

在这种情况下,显示指示到目前为止,中还没有键-值对intermKVStore

Step Through Map函数

  1. 继续越过断点。你可以使用dbstep执行单行,或者dbcont继续执行,直到MATLAB遇到另一个断点。您也可以单击一步继续编辑器选项卡。有关所有可用选项的详细信息,请参见调试MATLAB代码文件

    在这种情况下,使用dbstep(或点击一步),只执行第9行,该行将一个键值对添加到intermKVStore.检查新显示器intermKVStore

  2. 现在,使用dbcont(或点击继续)继续执行mapreduce.在下一个调用map函数时,MATLAB在第9行再次停止。的新显示屏intermKVStore指示它不包含任何键-值对,因为显示意味着仅显示大多数最近在map(或reduce)函数的当前调用中添加的键值对。

  3. 再次使用第9行dbstep(或点击一步),将下一个键值对添加到intermKVStore,并检查变量的新显示。MATLAB只显示在当前调用map函数期间添加的键值对。

  4. 通过删除断点并关闭文件来完成映射功能的调试maxArrivalDelayMapper.m

逐步递减函数

  1. 您可以使用相同的过程设置断点并逐步执行reduce函数。本例的reduce函数为maxArrivalDelayReducer.m.打开该文件进行编辑。

    编辑maxArrivalDelayReducer.m
  2. 设置两个断点:一个在第10行,一个在第13行。这使您能够检查ValueIterator最后将键值对添加到输出中,outKVStore

  3. 运行主示例文件。

    MaxMapReduceExample
  4. 当遇到第10行上的断点时,示例的执行将暂停。的调试显示ValueIterator指示活动键以及是否仍有值要检索。

  5. 现在,删除第10行上的断点并使用dbcont(或点击继续)继续执行示例,直到到达下一个断点(第13行)。因为这个reduce函数不断地比较对象中的每个新值ValueIterator对于全局最大值,mapreduce到中添加一个键值对,执行结束outKVStore

  6. 使用dbstep(或点击一步)只执行第13行。的显示outKVStore显示全局最大值mapreduce将作为最终答案返回。

  7. 现在使用dbcont(或点击继续)来加速执行,使示例能够完成运行。mapreduce返回最终结果。

    地图ans =键值100%减少100%  _________________ ______ ' MaxArrivalDelay”[1014]

有关在MATLAB中调试的完整指南,请参见调试与分析

另请参阅

相关的话题