Main Content

本页采用了机器翻译。点击此处可查看英文原文。

在并行池上运行 mapreduce

启动并行池

如果您安装了 Parallel Computing Toolbox™,执行 mapreduce 可以在您的默认配置文件指定的集群上打开一个并行池,作为执行环境。

您可以设置并行偏好,以便池不会自动打开。在这种情况下,如果您希望 mapreduce 使用它来并行化其工作,则必须明确启动一个池。请参阅指定您的并行首选项

例如,以下概念代码启动一个池,并在一段时间后将该开放池用于 mapreducer 配置。

p = parpool('Processes',n);
mr = mapreducer(p);
outds = mapreduce(tds,@MeanDistMapFun,@MeanDistReduceFun,mr)

注意

mapreduce 可以在任何支持并行池的集群上运行。本主题中的示例使用本地集群,适用于所有 Parallel Computing Toolbox 安装。

比较并行 mapreduce

以下示例根据航空数据存储来计算平均到达延迟。首先,它在 MATLAB 客户端会话中运行 mapreduce,然后在本地集群上并行运行。mapreducer 函数明确控制执行环境。

首先在本地集群上启动并行池。

p = parpool('Processes',4);
Starting parallel pool (parpool) using the 'Processes' profile ... 
connected to 4 workers.

创建两个 MapReducer 对象,用于为 mapreduce 指定不同的执行环境。

inMatlab = mapreducer(0);
inPool = mapreducer(p);

创建并预览数据存储。本例中使用的数据集可以在 matlabroot/toolbox/matlab/demos 中找到。

ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
     'SelectedVariableNames','ArrDelay','ReadSize',1000);
preview(ds)
    ArrDelay
    ________

     8      
     8      
    21      
    13      
     4      
    59      
     3      
    11      

接下来,在 MATLAB® 客户端会话中运行 mapreduce 计算。matlabroot/toolbox/matlab/demos 中提供了 map 和 Reduce 函数。

meanDelay = mapreduce(ds,@meanArrivalDelayMapper,...
@meanArrivalDelayReducer,inMatlab);
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map  10% Reduce   0%
Map  20% Reduce   0%
Map  30% Reduce   0%
Map  40% Reduce   0%
Map  50% Reduce   0%
Map  60% Reduce   0%
Map  70% Reduce   0%
Map  80% Reduce   0%
Map  90% Reduce   0%
Map 100% Reduce 100%
readall(meanDelay)
           Key             Value  
    __________________    ________

    'MeanArrivalDelay'    [7.1201]

然后,在当前并行池上运行计算。请注意,输出文本指示并行 mapreduce

meanDelay = mapreduce(ds,@meanArrivalDelayMapper,...
@meanArrivalDelayReducer,inPool);
Parallel mapreduce execution on the parallel pool:
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map 100% Reduce  50%
Map 100% Reduce 100%
readall(meanDelay)
           Key             Value  
    __________________    ________

    'MeanArrivalDelay'    [7.1201]

由于这个数据集相对较小,并行池的性能提升不太可能实现。此示例是为了展示在并行池上运行 mapreduce 的机制。随着数据集的增长,或者 map 和 Reduce 函数本身的计算量越来越大,与在 MATLAB 客户端会话中运行 mapreduce 相比,您可能希望看到并行池的性能有所提高。

注意

在集群上并行运行 mapreduce 时,输出中的键值对的顺序与在 MATLAB 中运行 mapreduce 不同。如果您的应用程序依赖于输出中的数据排列,则必须根据自己的要求对数据进行排序。

另请参阅

函数

相关示例

详细信息