Запустите mapreduce на параллельном пуле

Запустите параллельный пул

Если вам установили Parallel Computing Toolbox™, выполнение mapreduce может открыть параллельный пул на кластере, заданном вашим профилем по умолчанию для использования в качестве среды выполнения.

Можно установить параллельные настройки так, чтобы пул автоматически не открывался. В этом случае необходимо явным образом запустить пул, если вы хотите, чтобы mapreduce использовал его для распараллеливания его работы. Смотрите Задают Ваши Параллельные Настройки.

Например, следующий концептуальный код запускает пул, и некоторое время спустя использует тот открытый пул для настройки mapreducer.

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

Примечание

mapreduce может работать на любом кластере, который поддерживает параллельные пулы. Примеры в этой теме используют локальный кластер, который работает на все установки Parallel Computing Toolbox.

Сравните параллель mapreduce

Следующий пример вычисляет среднюю задержку прибытия от datastore данных авиакомпании. Сначала это запускает mapreduce на клиентском сеансе MATLAB, затем это запускается параллельно на локальном кластере. Функция mapreducer явным образом управляет средой выполнения.

Начните путем запуска параллельного пула на локальном кластере.

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

Создайте два объекта MapReducer для определения различных сред выполнения для mapreduce.

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

Создайте и предварительно просмотрите datastore. Набор данных, используемый в этом примере, доступен в 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      

Затем, выполните вычисление mapreduce на клиентском сеансе MATLAB®. Map и reduce функции доступны в matlabroot/toolbox/matlab/demos.

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 функции становятся более в вычислительном отношении интенсивными, вы можете ожидать видеть улучшенную производительность с параллельным пулом, по сравнению с выполнением mapreduce на клиентском сеансе MATLAB.

Примечание

При хождении параллельно под mapreduce на кластере порядок пар "ключ-значение" в выводе отличается по сравнению с выполнением mapreduce в MATLAB. Если ваше приложение зависит от расположения данных в выводе, необходимо отсортировать данные согласно собственным требованиям.

Смотрите также

Функции

Связанные примеры

Больше о