Saltar al contenido principal
Página

Tema 2.3 - Procesamiento Paralelo con MapReduce

Objetivos del Aprendizaje

● Comprender la necesidad del procesamiento paralelo para Big Data

● Comprender el paradigma de procesamiento MapReduce: Programas Map y Reduce

● Comprender la estructura de datos de pares de claves necesaria para MapReduce

● Aprender la estructura de los programas MapReduce

● Comprender los conceptos de los programas Job Tracker y TaskTracker

● Aprender cómo MapReduce ejecuta los programas a pesar de los fallos de los nodos


Arquitectura de Big Data



Técnicas - Algoritmos Distribuidos

  • Históricamente dominado por los sistemas de alto rendimiento
  • Problemas "cpu-bound", pocos datos, cálculos complejos
  • Por ejemplo: MPI (interfaz de paso de mensajes), los datos se envían a los agentes, el cálculo se realiza y los resultados devuelto al "coordinador"
  • Para procesar cantidades muy grandes de datos, hay que invertir la responsabilidad: trasladar el algoritmo a los datos
  • "Localidad de los datos"
  • Para maximizar el paralelismo: reducir la dependencia entre los "agentes"
  • Formalización: map / reduce



  • Arquitectura de MapReduce

    Dos tipos de trabajos:

    1. Mapeadores: Mapean el trabajo en muchas tareas
    2. Reductores: Combinan las entradas de los mapeadores en una única salida

    ● Trabajos/tareas rastreados en modo maestro-esclavo


    Arquitectura Maestro - Esclavo en MapReduce

    ● Un proceso es maestro, el resto son esclavos

    ● Hay un Job Tracker. Este rastrea el contenido de todos los TaskTrackers

    ● Cada TaskTracker rastrea los procesos en un Nodo Computacional



    MapReduce

    • Algoritmo compuesto por 2 pasos conceptuales
    • mapa - transformar datos en pares clave-valor
    • reducir - operación de agregación (suma, promedio, etc.) por clave
    • La implementación requiere más de 2 pasos, pero suelen ser transparentes para el programador
    • Su resiliencia y paralelismo son los que lo hacen particularmente interesante para Big-Data
    • “Embarassingly parallel” - "Embarazosamente paralelos"
    • Capacidad de reiniciar cualquier subpaso (siempre y cuando existan los datos de origen)





    Secuencia de MapReduce

    ● Map: (K1, V1) → list (K2, V2).

    ● Reduce: (K2, list(V2)) → list (K2, V3).



      • A menos que tenga un problema muy simple, una sola fase M / R no es suficiente
      •  Generalmente, debemos escribir varias fases y ejecutarlas en una cadena
        1. Manualmente:
        2. Laborioso
        3. Propenso a errores
        4. Potencialmente posibilidades de perdidas de optimización
      • Se han creado Varias abstracciones
      • Algunas tienen optimizaciones interesantes (agregación del lado del mapa)
      • Escribir el mapa / Reducir directamente no es realmente recomendable hoy en día

         Hive:
      • "Compila" el SQL en una cadena de fases M / R
      • Permite la gestión de datos estructurados (tabulares)
      • Dirigido principalmente a los analistas de negocio (BI), creación de informes, etc.

         Pig:
      • Lenguaje de alto nivel (algunos préstamos de SQL) compilado en M / R
      • Las fases están destinadas principalmente a los programadores / investigadores
      • En cascada
      • Abstracción de "tuberías y filtros" en Hadoop
      • Contiene un optimizador de tiempo de ejecución (plano lógico vs. plano físico) java,
      • Scala, clojure, ruby, python e interfaz SQL
      • Para programadores, y muchos otros...

    MR Funciona Como una Secuencia UNIX

    ● grep | sort | count myfile.txt

    ● Producirá un recuento de palabras en el documento de texto llamado myfile.txt


    Contador de Palabras Usando MapReduce



    Contador de Palabras Usando MapReduce Ejemplo 2

    Proceso general de conteo de palabras de MapReduce



    Pseudocódigo de MapR para WordCount

    ● map(String key, String value):

    ● // key: document name and value: document contents

    ● for each word w in value:

    ● EmitIntermediate (w, "1");

    ● reduce(String key, Iterator values):

    ● // key: a word, and values: a list of counts

    ● int result = 0;

    ● for each v in values:

    ● result += ParseInt (v);

    ● Emit (AsString(result));


    Ejemplo de WordCount: Myfile.txt

    ● Myfile: txt : Vamos a ir a un picnic cerca de nuestra casa. Vendrán muchos de nuestros amigos. Eres bienvenido a unirte a nosotros. Nos divertiremos

    ● Dividir en varios segmentos iguales. Se puede hacer con cada frase como un trozo de texto separado.


    Los cuatro segmentos tendrán el siguiente aspecto:

    ● Segmento1: Vamos a ir a un picnic cerca de nuestra casa

    ● Segmento2: Vienen muchos de nuestros amigos

    ● Segmento3: Eres bienvenido a unirte a nosotros

    ● Segmento4: Nos divertiremos

    ● Así pues, habrá 4 tareas de mapa, una para cada segmento de datos


    Resultados del Map en Cada Segmento



    Resultados Ordenados de las Operaciones del Map



    Resultados Tras la Fase de Reducción



    Pig vs Hive



    Lenguaje HIVE



    Arquitectura del Lenguaje PIG



    Preguntas de Repaso

    1. ¿Qué es MapReduce? ¿Cuáles son sus ventajas?

    2. ¿Qué es el formato de par clave-valor? ¿En qué se diferencia de otras estructuras de datos? ¿Cuáles son sus ventajas y limitaciones?

    3. ¿Qué es un programa de seguimiento de trabajos? ¿En qué se diferencia del programa de seguimiento de tareas?

    4. ¿Qué son Hive y Pig? ¿En qué se diferencian?

    Última modificación: lunes, 28 de marzo de 2022, 17:00