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

См. также

Функции

Похожие примеры

Подробнее о