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