Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Introducción a MapReduce

A medida que el número y el tipo de dispositivos de adquisición de datos crecen anualmente, el tamaño y la velocidad de los datos que se recopilan se expanden rápidamente. Estos grandes conjuntos de datos pueden contener gigabytes o terabytes de datos, y pueden crecer en el orden de megabytes o gigabytes por día. Si bien la recopilación de esta información presenta oportunidades de conocimiento, también presenta muchos desafíos. La mayoría de los algoritmos no están diseñados para procesar grandes conjuntos de datos en una cantidad razonable de tiempo o con una cantidad razonable de memoria. MapReduce le permite satisfacer muchos de estos desafíos para obtener información importante de grandes conjuntos de datos.

¿Qué es MapReduce?

MapReduce es una técnica de programación para analizar conjuntos de datos que no caben en la memoria. Es posible que esté familiarizado con MapReduce, que es una implementación popular que funciona con el sistema de archivos distribuido (). proporciona una implementación ligeramente diferente de la técnica MapReduce con la función.Hadoop®HadoopHDFS™MATLAB®mapreduce

utiliza un datastore para procesar los datos en pequeños trozos que encajan individualmente en la memoria.mapreduce Cada fragmento pasa por una fase Map, que formatea los datos que se van a procesar. A continuación, los fragmentos de datos intermedios pasan por una fase de reducción, que agrega los resultados intermedios para producir un resultado final. Las fases Map y reduce están codificadas por y funciones, que son entradas primarias.mapreducemapreduce Hay infinitas combinaciones de funciones de mapa y reducción para procesar datos, por lo que esta técnica es flexible y extremadamente potente para abordar grandes tareas de procesamiento de datos.

se presta a ser extendido para ejecutarse en varios ambientes.mapreduce Para obtener más información acerca de estas funciones, consulte.Acelere e implemente MapReduce con otros productos

La utilidad de la función radica en su capacidad para realizar cálculos en grandes colecciones de datos.mapreduce Por lo tanto, no es muy adecuado para realizar cálculos en conjuntos de datos de tamaño que se pueden cargar directamente en la memoria del ordenador y se analizan con técnicas tradicionales.mapreducenormal En su lugar, utilice para realizar un cálculo estadístico o analítico en un conjunto de datos que no caben en la memoria.mapreduce

Cada llamada al mapa o reducir la función es independiente de todos los demás.mapreduce Por ejemplo, una llamada a la función Map no puede depender de entradas o resultados de una llamada anterior a la función map. Es mejor dividir estos cálculos en varias llamadas a.mapreduce

Las fases del algoritmo MapReduce

mueve cada fragmento de datos en el almacén del datos de entrada a través de varias fases antes de llegar a la salida final.mapreduce En la siguiente figura se describen las fases del algoritmo.mapreduce

El algoritmo tiene los siguientes pasos:

  1. Lee un fragmento de datos del datastore de entrada mediante y, a continuación, llama a la función Map para que trabaje en ese fragmento.mapreduce[data,info] = read(ds)

  2. La función Map recibe el fragmento de datos, lo organiza o realiza un cálculo precursor y, a continuación, utiliza las funciones y para añadir pares clave-valor a un objeto de almacenamiento de datos intermedio llamado a.addaddmultiKeyValueStore El número de llamadas a la función MAP es igual al número de fragmentos en el almacén de datos de entrada.mapreduce

  3. Una vez que la función de mapa funciona en todos los fragmentos de datos del almacén, agrupa todos los valores del objeto intermedio por clave única.mapreduceKeyValueStore

  4. A continuación, llama a la función de reducción una vez para cada clave única agregada por la función de mapa.mapreduce Cada clave única puede tener muchos valores asociados. pasa los valores a la función de reducción como un objeto, que es un objeto utilizado para iterar sobre los valores.mapreduceValueIterator El objeto para cada clave única contiene todos los valores asociados para esa clave.ValueIterator

  5. La función de reducción utiliza las funciones y para recorrer en iteración los valores del objeto uno a la vez.hasnextgetnextValueIterator A continuación, después de agregar los resultados intermedios de la función de mapa, la función de reducción agrega pares de clave-valor finales a la salida mediante las funciones y.addaddmulti El orden de las claves en la salida es el mismo que el orden en el que la función de reducción los agrega al objeto final.KeyValueStore Es decir, no ordena explícitamente la salida.mapreduce

    Nota

    La función de reducción escribe los pares clave-valor finales en un objeto final.KeyValueStore Desde este objeto, extrae los pares clave-valor en el almacén de datos de salida, que es un objeto de forma predeterminada.mapreduceKeyValueDatastore

Ejemplo de cálculo de MapReduce

Este ejemplo utiliza un cálculo simple (la distancia media de viaje en un conjunto de datos de vuelo) para ilustrar los pasos necesarios para ejecutarse.mapreduce

Preparar datos

El primer paso para utilizar es construir un datastore para el conjunto de datos.mapreduce Junto con las funciones de asignación y reducción, el almacén de datos de un conjunto es una entrada obligatoria, ya que permite procesar los datos en fragmentos.mapreducemapreduce

funciona con la mayoría de los tipos de almacenes de datos.mapreduce Por ejemplo, cree un objeto para el conjunto de datos.TabularTextDatastoreairlinesmall.csv

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA')  ds =     TabularTextDatastore with properties:                        Files: {                              ' ...\matlab\toolbox\matlab\demos\airlinesmall.csv'                              }                FileEncoding: 'UTF-8'    AlternateFileSystemRoots: {}           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

Varias de las opciones descritas anteriormente son útiles en el contexto de.mapreduce La función se ejecuta en el para recuperar datos para pasar a la función de mapa.mapreducereaddatastore Por lo tanto, puede usar el, y opciones para configurar directamente el tamaño del fragmento y el tipo de datos que pasa a la función de mapa.SelectedVariableNamesSelectedFormatsReadSizemapreduce

Por ejemplo, para seleccionar la variable (distancia total de vuelo) como la única variable de interés, especifique.DistanceSelectedVariableNames

ds.SelectedVariableNames = 'Distance';

Ahora, cada vez que las funciones, o actúan en, devolverán sólo la información de la variable.readreadallpreviewdsDistance Para confirmarlo, puede previsualizar las primeras filas de datos en el almacén. Esto le permite examinar el formato de los datos que la función pasará a la función de mapa.mapreduce

preview(ds)  ans =       Distance     ________      308          296          480          296          373          308          447          954      

Para ver los datos que pasarán a la función de mapa, utilice.exactmapreduceread

Para obtener información adicional y un resumen completo de las opciones disponibles, consulte.Función Datastore

Escribir mapa y reducir funciones

La función llama automáticamente al mapa y reduce las funciones durante la ejecución, por lo que estas funciones deben cumplir ciertos requisitos para ejecutarse correctamente.mapreduce

  1. Las entradas de la función de mapa son, y:datainfointermKVStore

    • y son el resultado de una llamada a la función en la entrada, que se ejecuta automáticamente antes de cada llamada a la función de mapa.datainforeaddatastoremapreduce

    • es el nombre del objeto intermedio al que la función de correlación necesita añadir pares clave-valor.intermKVStoreKeyValueStore Las funciones y utilizan este nombre de objeto para agregar pares clave-valor.addaddmulti Si ninguna de las llamadas a la función Map agrega pares clave-valor a, entonces no llama a la función de reducción y el almacén de datos resultante está vacío.intermKVStoremapreduce

    Un ejemplo sencillo de una función de mapa es:

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

    Esta función de mapa tiene sólo tres líneas, que realizan algunas funciones directas. La primera línea filtra todos los valores en el fragmento de datos de distancia.NaN La segunda línea crea un vector de dos elementos con la distancia total y cuenta para el fragmento, y la tercera línea agrega ese vector de valores a con la clave,.intermKVStore'sumAndLength' Una vez que esta función de mapa se ejecuta en todos los fragmentos de datos, el objeto contiene la distancia total y el recuento de cada fragmento de datos de distancia.dsintermKVStore

    Guarde esta función en la carpeta actual como.MeanDistMapFun.m

  2. Las entradas para la función de reducción son, y:intermKeyintermValIteroutKVStore

    • es para la clave activa agregada por la función map.intermKey Cada llamada a la función de reducción especifica una nueva clave única de las claves del objeto intermedio.mapreduceKeyValueStore

    • es el asociado con la clave activa,.intermValIterValueIteratorintermKey Este objeto contiene todos los valores asociados a la clave activa.ValueIterator Desplácese por los valores utilizando las funciones y.hasnextgetnext

    • es el nombre del objeto final al que la función de reducción necesita agregar pares clave-valor. toma los pares clave-valor de salida y los devuelve en la salida, que es un objeto de forma predeterminada.outKVStoreKeyValueStoremapreduceoutKVStoredatastoreKeyValueDatastore Si ninguna de las llamadas a la función de reducción agrega pares clave-valor a, a continuación, devuelve un almacén de datos vacío.outKVStoremapreduce

    Un ejemplo simple de una función de reducción es:

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

    Esta función de reducción recorre cada uno de los valores de distancia y recuento, manteniendo un total de la distancia y el recuento después de cada pasada.intermValIter Después de este bucle, la función de reducción calcula la distancia de vuelo media general con una división simple y, a continuación, agrega una sola clave a.outKVStore

    Guarde esta función en la carpeta actual como.MeanDistReduceFun.m

Para obtener información sobre la escritura de funciones de mapa y reducción más avanzadas, consulte y.Escriba una función de mapaEscriba una función de reducción

Ejecute MapReduce

Después de tener un almacén de datos, una función de mapa y una función de reducción, puede llamar para realizar el cálculo.mapreduce Para calcular la distancia media del vuelo en el conjunto de datos, llame a Using y.mapreducedsMeanDistMapFun.mMeanDistReduceFun.m

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 100%

De forma predeterminada, la función muestra información de progreso en la línea de comandos y devuelve un objeto que apunta a los archivos de la carpeta actual.mapreduceKeyValueDatastore Puede ajustar las tres opciones utilizando los argumentos de par para, y.Name,Value'OutputFolder''OutputType''Display' Para obtener más información, consulte la página de referencia para.mapreduce

Ver resultados

Utilice la función para leer los pares clave-valor del almacén de datos de salida.readall

readall(outds)  ans =        Key        Value        ______    __________      'Mean'    [702.1630]

Consulte también

|

Temas relacionados