exponenta event banner

Управляемый mapreduce в параллельном пуле

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

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

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

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

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

Примечание

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

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

В следующем примере вычисляется средняя задержка прибытия из хранилища данных авиакомпании. Сначала запускается 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);

Создание и предварительный просмотр хранилища данных. Набор данных, используемый в этом примере, доступен в 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 ®. Функции карты и сокращения доступны в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 в параллельном пуле. По мере роста набора данных или увеличения вычислительной нагрузки самих функций отображения и сокращения можно ожидать повышения производительности параллельного пула по сравнению с запущенным. mapreduce в клиентском сеансе MATLAB.

Примечание

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

См. также

Функции

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

Подробнее