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