48
SPARK - RDD “Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing” Carmen Alonso Martínez Manuel Bazaga Fortes Javier de la Rosa Fernández Alexandra Conde Herno Danilo Alencar

Resilient Distributed Dataset - Analisis paper

Embed Size (px)

Citation preview

SPARK - RDD“Resilient Distributed Datasets: A Fault-Tolerant

Abstraction for In-Memory Cluster Computing”

Carmen Alonso Martínez

Manuel Bazaga Fortes

Javier de la Rosa Fernández

Alexandra Conde Herno

Danilo Alencar

SPARK

● Introducción

● RDD’s

● Interfaz de programación

● Representación de los RDD’s

● Implementación

● Evaluación

● Comentarios y trabajo actual

● Conclusión

Introducción

Framework especializado para computación iterativa y

minería de datos interactiva.

¿Reutilizar resultados intermedios para varios cálculos?

-Queremos crear subconjuntos de datos y realizar varias

‘queries’ sobre ellos

RETO: tolerancia a fallos

RDD - Definición

Colección particionada de datos de sólo lectura.

Se crean a partir de operaciones deterministas

sobre:

● Almacenamiento estable

● Otros RDDs

Permiten a los usuarios elegir la estrategia de

almacenamiento.

Interfaz de programación Spark

Cada colección de datos se representa como un objeto, y

las transformaciones se invocan utilizando métodos sobre

estos objetos.

Los RDDs son calculados la primera vez que se ejecuta

una acción sobre ellos.

Si no hay suficiente RAM, Spark puede pasar los RDDs a

disco.

Ejemplo - Console log mining

lines = spark.textFile("hdfs://...")

errors = lines.filter(_.startsWith("ERROR"))

errors.persist()

errors.count()

errors.filter(_.contains("MySQL")).count()

errors.filter(_.contains("HDFS")) .map(_.split(’\t’)(3)) .collect()

Ventajas del modelo RDD

Diferencia RDDs vs DSM:

RDD-transf. de granularidad gruesa

DSM-permiten R/W de granularidad fina

● Recuperación: linaje

● Mitigación de nodos lentos

● Programación de tareas

● Degradación gradual cuando falta memoria

Aplicaciones no adecuadas para RDDs

Actualizaciones asíncronas de granularidad finaie: web crawler, almacenamiento para aplicaciones web

Misma operación a todos los elementos del dataset

Análisis masivos

SPARK

● Introducción

● RDD’s

● Interfaz de programación

● Representación de los RDD’s

● Implementación

● Evaluación

● Comentarios y trabajo actual

● Conclusión

Spark Programming Interface

● Spark proporciona una API similar a DryadLINQ y a

Flume.

● Los programadores definen los RDD a través de

transformaciones o de datos de almacenamiento

estables.

● A estos RDDs se les aplican accioneso Acciones: operaciones que devuelven un valor a la

aplicación o exportan datos al sistema de

almacenamiento.

Spark Programming Interface

Spark maneja los RDD de forma perezosa, una

transformación no se realiza hasta que una acción no

se ejecuta por primera vez.

Mediante el método persist se puede indicar a Spark

que datos serán reusados

Spark permite almacenar también en disco los RDD

en lugar de en memoria (por defecto).

También se puede establecer prioridades de

persistencia

Ejemplo de aplicaciones

Logistic Regression

Al aplicar el algoritmo al mismo conjunto de datos y estar

estos datos en memoria puede aumentar la velocidad 20x.

Ejemplo de aplicaciones

PageRank

SPARK

● Introducción

● RDD’s

● Interfaz de programación

● Representación de los RDD’s

● Implementación

● Evaluación

● Comentarios y trabajo actual

● Conclusión

Representando RDDs

Cada interfaz RDD expone:

● Un conjunto de particiones, que son piezas

atómicas de la base de datos.

● Un conjunto de dependencias de los padres RDDs;

● Una función para calcular el conjunto de datos en

función de sus padres.

● Metadatos sobre su esquema de partición y la

colocación de los datos.

Representando RDDs

Existen dos tipos de dependencias RDD:

● Dependencias estrechas, donde cada partición de

la matriz RDD es utilizada como máximo por una

particion hija.

● Dependencias anchas, donde múltiples particiones

secundarias pueden depender de ella.

Representando RDDs

Dependencias estrechas vs anchas

● Estrechas

Permite la ejecución en Pipeline

y calcula todas las particiones

del padre (segmentar).

Recuperación tras fallo más

eficiente

Ej: map

● Anchas

Requieren que los datos de todas

las particiones de los padres estén

disponibles.

Podría requerir una re-ejecución

Ej: join

Algunas implementaciones RDD

● HDFS: Una posible entrada RDD podría ser un

HDFS. Devuelve una partición por bloque de fichero.

● Map: Devuelve un objeto MappedRDD con las

mismas particiones y preferencias de localización que

su padre.

● Union: La función unión aplicada a dos RDD

devuelve un RDD cuya particiones son la unión de

los dos padres.

Algunas implementaciones RDD

● sample: Función similar a la función map. El RDD

guarda un número aleatorio generado por una semilla

para cada partición.

● join: La unión de dos RDD puede conducir a:

o Dos dependencias estrechas

o Dos dependencias anchas

o Combinación de ambas

Pero en cualquier caso la salida es un RDD.

SPARK

● Introducción

● RDD’s

● Interfaz de programación

● Representación de los RDD’s

● Implementación

● Evaluación

● Comentarios y trabajo actual

● Conclusión

Implementación

- Implementan Spark en 14000 líneas de Scala

- El sistema se ejecuta sobre el administrador de Cluster Mestos

permitiendo compartir recursos con Hadoop, MPI y otras

aplicaciones

- Cada programa de Spark funciona con una aplicación separada

de Mesos, con su propio driver y workers y recursos comparti-

dos entre estas aplicaciones que está manejada por Mesos

- Spark puede leer cualquier datos de entrada de Hadoop usando

APIs del propio Hadoop y ejecutar una versión de Scala sin

cambios

Planificación de Tareas

Usa representación de RDDs,es similar al Dryads pero añadecuales particiones persistentesestán disponibles en memoria.

Si el usuario ejecuta unaacción (count o save) en elRDD, el planificador examinacual línea gráfica del RDD paraconstruir el DAG de stagespara ser ejecutado

Planificación de Tareas

El planificador:

● Ejecuta las tareas de particiones faltosas para cada stage hasta que

esté computada con el objetivo de RDD

● Asigna tarea para cada máquina basada en los datos locales usando

un delay, es decir, si la tarea necesita que la partición sea procesada

en la memoria disponible en un nodo, enviaremos para este nodo, de

lo contrario, si una tarea procesa una partición para algún RDD que

proporcione ubicaciones preferidas (ej.: un archivo de HDFS),

nosotros le enviamos a este.

Integración Intérprete

- Shell interactivo similares al de Ruby y Python

- Usuarios ejecutarán Spark interactivamente desde el intérprete para

consultar grandes conjuntos de datos

- El intérprete opera compilando la clase para cada línea tecleada por

el usuario, cargando en el JVM e invocando una función a él

- Esta clase incluye un objeto semifallo que contiene las variables o

funciones en esta línea e que ejecuta el código de línea en el método

de inicialización.

Integración Intérprete

Usuario teclea var x = 5 println (x) y el intérprete define

Class Line1 que contiene x y causa que la segunda línea

compile como println(Line1.getInstance().x)

1- Envío de Clase – deja que los nodos worker traigan el

bytecode para las clases creadas en la cada línea usando

HTTP.

2- Generación de código modificado - como el objeto

creado de semifallo se accede por método estático en

su clase correspondiente, Java no se traza a través del

gráfico de objeto para enviar la instancia la Línea 1

envolver alrededor del x. Pero los nodos workers

tampoco recibirán la x. Cambiamos que el código lógico

referencie la instancia para cada línea de objeto

directamente.

Administración de memoria

Provee 3 opciones para almacenamiento persistentes de

RDDs:

- En memoria como objeto Java deserializados

- En memoria como datos deserializados

- Almacenamiento en disco

Soporte para Checkpointing

- Es útil para estabilizar el almacenamiento

- Es útil para RDD tenga linaje de grafos de

dependencias anchas como los datasets de PageRank

- Spark provee API para este Soporte de Checkpointing

pero deja la decisión de soporte para el usuario.

SPARK

● Introducción

● RDD’s

● Interfaz de programación

● Representación de los RDD’s

● Implementación

● Evaluación

● Comentarios y trabajo actual

● Conclusión

Evaluación

● Se realizan una serie de experimentos para evaluar Spark y los RDD,:

○ velocidad con respecto a otros sistemas (Hadoop y HadoopBM)

○ evaluación de la escalabilidad

○ tolerancia a fallos

● Amazon EC2:

○ Máquinas xlarge con 4 cores y 15 GB de RAM

○ Hemos usado HDFS con 256 MB de tamaño bloque

Aplicaciones iterativas de Machine Learning

Sistemas:

● Hadoop 0.20.2 ( ahora

va por el 2.60)

● HadoopBinMem

● Spark

Datos:

● 100 GB de datos

● Cluster de 100 nodos

Mejora de 20x

Ejemplo - Pagerank

Datos:

● 54 GB de Wikipedia

● 10 iteraciones

● 4 millones de artículos

Sistemas:

● Hadoop

● Spark

● Spark + Particiones

Controladas

Mejora de 7.4 X

Recuperación de Fallos

Datos:

● K-menas

● 75 nodos

● 100 GB datos

Comportamiento con Memoria Insuficiente

Datos:

● 100GB de datos

● 25 nodos

● Regresión Lógica

Otras aplicaciones implementadas en Spark

Traffic Modeling:

● 10000 link

● 600000 ejemplos de tramos de

viaje

Spam en Twitter:

● 50GB datos

● 250000 URLs

Ejemplo - Minería de Datos

Datos:

● 1TB de logs de Wikipedia

● 2 años de datos)

● 100 4xlarge instancias EC2

● 8 cores y 68GB de RAM

Evaluación - conclusiones

● Spark llega a ser hasta 20x en aplicaciones de Machine

Learning Iterativas.

● Aplicaciones de usuarios (video, tráfico,...) llegan a ser 40x más

rápidas que con Hadoop.

● Si un nodo falla, Spark puede recuperarse rápidamente

reconstruyendo sólo los RDDs perdidos.

● Spark puede ser usado para hacer consultas a un conjunto de

datos de 1TB con una latencia de unos 5-7 segundos.

SPARK

● Introducción

● RDD’s

● Interfaz de programación

● Representación de los RDD’s

● Implementación

● Evaluación

● Comentarios y trabajo actual

● Conclusión

Discusión

Aunque las RDDs parecen ofrecer una interfaz de programación

limitada debido a su naturaleza inmutable y transformaciones de

granularidad gruesa, hemos encontrado que son adecuadas para

una amplia clase de aplicaciones.

Pueden expresar un sorprendente número de modelos de

programación de clúster que hasta el momento se han propuesto

como frameworks separados, lo que permite a los usuarios

componer estos modelos en un programa y compartir datos entre

ellos.

Expresando Modelos Existentes

● MapReduce

● DryadLINQ SQL.

● Pregel.

● MapReduce iterativo.

● Procesamiento de flujo por lotes.

Aprovechamiento para la depuración

Diseño determinista recomputable para tolerancia a fallos, esta

propiedad también facilita la depuración:

1. Reconstruir estos RDD después y permitir al usuario consultar

de forma interactiva.

1. Volver a ejecutar cualquier tarea desde el trabajo en un

depurador de un solo proceso

Trabajo Relacionado

Modelos de Programación de clúster

● A diferencia de MapReduce, Dryad y Ciel representa un

intercambio más eficiente de la abstracción de datos que el

almacenamiento estable porque evitan el costo de replicación

de datos, I/O y serialization.

● DryadLINQ y FlumeJava proporcionan un API de lenguaje

integrado donde el usuario manipula "colecciones paralelas" a

través de operadores como map y join, no pueden compartir

eficientemente datos a través de consultas.

Trabajo Relacionado

● Aplicaciones que requieren el intercambio de datos, Pregel es

compatible con aplicaciones de gráficos iterativos, mientras que

en Twister y HaLoop son los tiempos de ejecución de

MapReduce iterativos. RDDs proporcionan una abstracción de

almacenamiento distribuido de forma explícita y por lo tanto

pueden soportar aplicaciones que estos sistemas

especializados no capturan, como la minería de datos

interactiva

Trabajo Relacionado

● Algunos sistemas exponen un estado mutable compartido para

permitir al usuario realizar la computación en memoria. Por

ejemplo, Piccolo permite a los usuarios ejecutar funciones

paralelas que leen y actualizan celdas en una tabla hash

distribuida, similar a los sistemas Distribuidos de Memoria

Compartida (DSM) y las stores de clave valor como RAMCloud.

RDDs proporcionan una interfaz de programación de alto nivel

basado en operadores como map, sort y join. Y recuperación de

datos basados en linaje(Piccolo y DSM). también proporcionan

otras ventajas sobre DSM, como la mitigación rezagada

Trabajo Relacionado

Sistemas de almacenamiento en caché

● Nectar puede reutilizar los resultados intermedios a través de

trabajos DryadLINQ identificando sub expresiones comunes con

el análisis del programa. No proporciona el almacenamiento en

memoria caché (se coloca los datos en una sistema de datos

distribuido), ni permite a los usuarios controlar de forma

explícita qué conjuntos de datos para persistir y cómo

particionarlos

● Ciel y FlumeJava no proporcionan control sobre lo que se

almacena en memoria caché o que datos son cacheados.

Trabajo Relacionado

Linaje

● El mecanismo de recuperación basado en el linaje es similar al

mecanismo de recuperación que se utiliza dentro de un

cómputo (Job) en MapReduce y Dryad, que registra las

dependencias entre un DAG de tareas. en estos sistemas, la

información se pierde después que termina un trabajo, lo que

requiere el uso de un sistema de almacenamiento replicado

para compartir datos a través de cálculos. RDD aplican linaje

para persistir en la memoria los datos eficientemente a través

de cálculos, sin costo de replicación e I/O de disco.

Trabajo Relacionado

Bases de datos relacionales

● RDD persistentes asemejan vistas materializadas. Sin embargo,

al igual que los sistemas de DSM, las bases de datos suelen

permitir acceso de grano-fino de lectura y escritura a todos los

registros, lo que requiere el registro de las operaciones y datos

para la tolerancia a fallos y la sobrecarga adicional para

mantener la consistencia. Estos gastos no son necesarios con

el modelo de transformación de grano grueso de RDD

SPARK

● Introducción

● RDD’s

● Interfaz de programación

● Representación de los RDD’s

● Implementación

● Evaluación

● Comentarios y trabajo actual

● Conclusión

Conclusión

● Son eficientes, de uso general y con tolerancia a fallos para el

intercambio de datos en las aplicaciones del clúster.

● RDD puede expresar una amplia gama de aplicaciones

paralelas (modelos de programación especializados que se han

propuesto para el cálculo iterativo)

● RDD ofrecen una API basada en las transformaciones de

granuralidad gruesa que les permite recuperar datos

eficientemente usando linaje.

● Implementaron RDD en Spark que supera a Hadoop hasta en

un 20 × y se puede utilizar de forma interactiva para consultar

cientos de gigabytes de datos.