Начало работы с MapReduce

Как номер и тип устройств сбора данных ежегодно растет, чистый размер и уровень собранных данных быстро расширяются. Эти большие наборы данных могут содержать гигабайты или терабайты данных, и могут вырасти на порядке мегабайтов или гигабайтов в день. В то время как набор этой информации представляет возможности для понимания, это также представляет собой много проблем. Большинство алгоритмов не спроектировано, чтобы обработать большие наборы данных за разумное количество времени или с разумным объемом памяти. MapReduce позволяет вам справляться со многими из этих проблем получить важную информацию от больших наборов данных.

Что такое MapReduce?

MapReduce является методом программирования для анализа наборов данных, которые не умещаются в памяти. Можно быть знакомы с MapReduce Hadoop®, который является популярной реализацией, которая работает с Распределенной файловой системой Hadoop (HDFS™). MATLAB® обеспечивает немного отличающуюся реализацию метода MapReduce с mapreduce функция.

mapreduce использует datastore, чтобы обработать данные в маленьких блоках, которые индивидуально помещаются в память. Каждый блок проходит фазу Map, которая форматирует данные, которые будут обработаны. Затем промежуточные блоки данных проходят фазу Reduce, которая агрегировала промежуточные результаты привести к конечному результату. Фазы Map и Reduce закодированы map и reduce функциями, которые являются первичными входными параметрами к mapreduce. Существуют бесконечные комбинации map и reduce функций, чтобы обработать данные, таким образом, этот метод и гибок и чрезвычайно мощен для решения больших задач обработки данных.

mapreduce поддается расширению, чтобы запуститься в нескольких средах. Для получения дополнительной информации об этих возможностях, смотрите, Убыстряются и Развертывают MapReduce Используя Другие продукты.

Утилита mapreduce функция находится в своей способности выполнить вычисления на большом количестве данных. Таким образом, mapreduce не является подходящим для выполнения вычислений на нормальных размерных наборах данных, которые могут загрузиться непосредственно в память компьютера и анализируются с традиционными методами. Вместо этого используйте mapreduce выполнять статистический или аналитический метод расчета на наборе данных, который не умещается в памяти.

Каждый вызов карты или уменьшает функцию mapreduce независимо от всех других. Например, вызов функции карты не может зависеть от входных параметров или следует из предыдущего вызова функции карты. Лучше разбивать такие вычисления во множественные вызовы mapreduce.

Фазы алгоритма MapReduce

mapreduce перемещения каждый блок данных во входном datastore через несколько фаз прежде, чем достигнуть окончательного результата. Следующая фигура обрисовывает в общих чертах фазы алгоритма для mapreduce.

Алгоритм имеет следующие шаги:

  1. mapreduce читает блок данных из входного datastore с помощью [data,info] = read(ds), и затем вызывает функцию карты, чтобы работать над тем блоком.

  2. Функция карты получает блок данных, организует его или выполняет предшествующее вычисление, и затем использует add и addmulti функции, чтобы добавить пары "ключ-значение" в промежуточный объект хранения данных вызвали KeyValueStore. Количество вызовов карты функционирует mapreduce равно количеству блоков во входном datastore.

  3. После того, как функция карты работает надо всеми блоками данных в datastore, mapreduce группы все значения в промежуточном KeyValueStore объект уникальным ключом.

  4. Затем mapreduce вызывает уменьшать функцию однажды для каждого уникального ключа, добавленного функцией карты. Каждый уникальный ключ может иметь много присваиваемых значений. mapreduce передает значения уменьшать функции как ValueIterator объект, который является объектом, раньше выполнял итерации по значениям. ValueIterator объект для каждого уникального ключа содержит все присваиваемые значения для того ключа.

  5. Уменьшать функция использует hasnext и getnext функции, чтобы выполнить итерации через значения в ValueIterator объект по одному. Затем после агрегации промежуточного звена следует из функции карты, уменьшать функция добавляет итоговые пары "ключ-значение" в выход с помощью add и addmulti функции. Порядок ключей в выходе совпадает с порядком, в котором уменьшать функция добавляет их в итоговый KeyValueStore объект. Таким образом, mapreduce явным образом не сортирует выход.

    Примечание

    Уменьшать функция пишет итоговые пары "ключ-значение" в итоговый KeyValueStore объект. От этого объекта, mapreduce вытягивает пары "ключ-значение" в выходной datastore, который является KeyValueDatastore объект по умолчанию.

Вычисление MapReduce в качестве примера

Этот пример использует простое вычисление (среднее значение путешествуют на расстояние в наборе полетных данных) проиллюстрировать, что шаги должны были запустить mapreduce.

Подготовка данных

Первый шаг к использованию mapreduce должен создать datastore для набора данных. Наряду с map и reduce функциями, datastore для набора данных является необходимым входом к mapreduce, поскольку это позволяет mapreduce обрабатывать данные в блоках.

mapreduce работает с большинством типов хранилищ данных. Например, создайте TabularTextDatastore объект для airlinesmall.csv набор данных.

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA')
ds = 

  TabularTextDatastore with properties:

                      Files: {
                             ' ...\matlab\toolbox\matlab\demos\airlinesmall.csv'
                             }
                    Folders: {
                             ' ...\matlab\toolbox\matlab\demos'
                             }
               FileEncoding: 'UTF-8'
   AlternateFileSystemRoots: {}
      PreserveVariableNames: false
          ReadVariableNames: true
              VariableNames: {'Year', 'Month', 'DayofMonth' ... and 26 more}
             DatetimeLocale: en_US

  Text Format Properties:
             NumHeaderLines: 0
                  Delimiter: ','
               RowDelimiter: '\r\n'
             TreatAsMissing: 'NA'
               MissingValue: NaN

  Advanced Text Format Properties:
            TextscanFormats: {'%f', '%f', '%f' ... and 26 more}
                   TextType: 'char'
         ExponentCharacters: 'eEdD'
               CommentStyle: ''
                 Whitespace: ' \b\t'
    MultipleDelimitersAsOne: false

  Properties that control the table returned by preview, read, readall:
      SelectedVariableNames: {'Year', 'Month', 'DayofMonth' ... and 26 more}
            SelectedFormats: {'%f', '%f', '%f' ... and 26 more}
                   ReadSize: 20000 rows
                 OutputType: 'table'
                   RowTimes: []

  Write-specific Properties:
     SupportedOutputFormats: ["txt"    "csv"    "xlsx"    "xls"    "parquet"    "parq"]
        DefaultOutputFormat: "txt"

Несколько из ранее описанных опций полезны в контексте mapreduce. mapreduce функция выполняет read на datastore, чтобы получить данные, чтобы передать функции карты. Поэтому можно использовать SelectedVariableNamesSelectedFormats , и ReadSize опции, чтобы непосредственно сконфигурировать размер блока и тип данных, что mapreduce передачи в функцию карты.

Например, чтобы выбрать Distance (общее расстояние рейса) переменная как единственная переменная интереса, задайте SelectedVariableNames.

ds.SelectedVariableNames = 'Distance';

Теперь каждый раз, когда readreadall, или preview функции действуют на ds, они возвратят только информацию для Distance переменная. Чтобы подтвердить это, можно предварительно просмотреть первые несколько строк данных в datastore. Это позволяет вам исследовать формат данных что mapreduce функция передаст функции карты.

preview(ds)
ans =

  8×1 table

    Distance
    ________

      308   
      296   
      480   
      296   
      373   
      308   
      447   
      954 

Просмотреть точные данные что mapreduce передаст функции карты, использовать read.

Для получения дополнительной информации и полных сводных данных доступных параметров, смотрите Datastore.

Запись карты и сокращение функций

mapreduce функционируйте автоматически вызывает map и reduce функции во время выполнения, таким образом, эти функции должны удовлетворить определенные требования, чтобы запуститься правильно.

  1. Входными параметрами к функции карты является dataинформация, и intermKVStore:

    • data и info результат вызова read функция на входном datastore, который mapreduce выполняется автоматически перед каждым вызовом функции карты.

    • intermKVStore имя промежуточного KeyValueStore возразите, в который функция карты должна добавить пары "ключ-значение". add и addmulti функции используют это имя объекта, чтобы добавить пары "ключ-значение". Если ни один из вызовов функции карты не добавляет пары "ключ-значение" в intermKVStore, затем mapreduce не вызывает уменьшать функцию, и получившийся datastore пуст.

    Простой пример функции карты:

    function MeanDistMapFun(data, info, intermKVStore)
        distances = data.Distance(~isnan(data.Distance));
        sumLenValue = [sum(distances)  length(distances)];
        add(intermKVStore, 'sumAndLength', sumLenValue);
    end

    Эта функция карты имеет только три линии, которые выполняют некоторые прямые роли. Первые сетевые фильтры весь NaN значения в блоке данных о расстоянии. Вторая линия создает двухэлементный вектор с общим расстоянием, и значьте блок, и третья линия добавляет что вектор значений к intermKVStore с ключом, 'sumAndLength'. После того, как эта функция карты работает на всех блоках данных в ds, intermKVStore объект содержит общее расстояние, и значьте каждый блок данных о расстоянии.

    Сохраните эту функцию в своей текущей папке как MeanDistMapFun.m.

  2. Входными параметрами к уменьшать функции является intermKey, intermValIter, и outKVStore:

    • intermKey для активного ключа, добавленного функцией карты. Каждый вызов уменьшать функции mapreduce задает новый уникальный ключ от ключей в промежуточном KeyValueStore объект.

    • intermValIter ValueIterator сопоставленный с активным ключом, intermKey. Этот ValueIterator объект содержит все значения, сопоставленные с активным ключом. Просмотрите значения путем прокрутки с помощью hasnext и getnext функции.

    • outKVStore имя для итогового KeyValueStore возразите, в который уменьшать функция должна добавить пары "ключ-значение". mapreduce берет выходные пары "ключ-значение" из outKVStore и возвращает их в выходном datastore, который является KeyValueDatastore объект по умолчанию. Если ни один из вызовов уменьшать функции не добавляет пары "ключ-значение" в outKVStore, затем mapreduce возвращает пустой datastore.

    Простой пример уменьшать функции:

    function MeanDistReduceFun(intermKey, intermValIter, outKVStore)
        sumLen = [0 0];
        while hasnext(intermValIter)
            sumLen = sumLen + getnext(intermValIter);
        end
        add(outKVStore, 'Mean', sumLen(1)/sumLen(2));
    end

    Это уменьшает функциональные циклы через каждое расстояние и значения количества в intermValIter, хранение рабочего общего количества расстояния и количества после каждой передачи. После этого цикла уменьшать функция вычисляет общее среднее расстояние рейса с простым делением, и затем добавляет один ключ в outKVStore.

    Сохраните эту функцию в своей текущей папке как MeanDistReduceFun.m.

Для получения информации о записи более усовершенствованных map и reduce функций смотрите Запись Функция Карты и Запись Уменьшать Функция.

Выполнение mapreduce

После того, как у вас будут datastore, функция карты и уменьшать функция, можно вызвать mapreduce выполнять вычисление. Чтобы вычислить среднее расстояние рейса в наборе данных, вызовите mapreduce использование ds, MeanDistMapFun, и MeanDistReduceFun.

outds = mapreduce(ds, @MeanDistMapFun, @MeanDistReduceFun);
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map  16% Reduce   0%
Map  32% Reduce   0%
Map  48% Reduce   0%
Map  65% Reduce   0%
Map  81% Reduce   0%
Map  97% Reduce   0%
Map 100% Reduce   0%
Map 100% Reduce 100%

По умолчанию, mapreduce функционируйте информация о прогрессе отображений в командной строке, и возвращает KeyValueDatastore возразите что точки против файлов в текущей папке. Можно настроить все три из этих опций с помощью Name,Value парные аргументы для 'OutputFolder''OutputType' , и 'Display'. Для получения дополнительной информации смотрите страницу с описанием для mapreduce.

Просмотр результатов

Используйте readall функционируйте, чтобы считать пары "ключ-значение" из выходного datastore.

readall(outds)
ans =

  1×2 table

      Key          Value    
    ________    ____________

    {'Mean'}    {[702.1630]}

Смотрите также

|

Похожие темы