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. Если приложение зависит от расположения данных в выходных данных, необходимо сортировать данные в соответствии с собственными требованиями.