Está en la página 1de 6

Spark: Cluster Computing

with Working Sets


Anibal Ventura Arocutipa
Motivación
- Nace como respuesta a las limitaciones del paradigma de computación en clúster MapReduce.
- Dos casos donde MapReduce es deficiente:
- Interactive Jobs:
- Aplica la misma función sobre el mismo Dataset.
- Cada job en MapReduce tiene que recargar la información desde disco
- Interactive Analytics:
- Latencia significativa debido que al tener los Jobs separados cada uno tiene que leer información del
disco lo que tarda decenas de segundos.
Modelo de programación
- Resilient Distributed Datasets (RDDs):
- Es una colección de solo lectura de objetos particionados en un conjunto de máquinas que se pueden
reconstruir si se pierde una partición.
- No es necesario que exista en el almacenamiento físico.
- Un identificador de un RDD contiene suficiente información para calcular el RDD a partir de los datos en un
almacenamiento confiable.
Resilient Distributed Datasets (RDDs)
Se permite su construcción de cuatro maneras:

- Desde un archivo (HDFS)


- Por “paralelización” de una colección en Scala. Dividir entre nodos.
- Por “transformación” de un RDD existente. Usando la operación flatMap.
- Cambiando la “persistencia” de un RDD existente.
- Convertir en dataset de acceso rápido - Cache
- Guardar en el sistema de archivos distribuidos - HDFS
Modelo de programación
- Parallel Operations:
- Reduce: Combina los elementos del dataset usando una función asociativa que produce un resultado en el
programa driver.
- Collect: Envía todos los elementos del dataset al driver program.
- Foreach: Pasa cada elemento a través de una función proporcionada por el usuario. Como acción secundaria.
Modelo de programación
- Shared Variables:
- Se puede invocar las operaciones como: map, filter y reduce a las cuales se les pasa funciones o variables.
- Existen dos tipo de variables compartidas:
- Broadcast variables: En caso se una pieza de información de solo lectura se pueden usar muchas
operaciones paralelas es conveniente distribuir a los workers cada closure.
- Accumulators: Estas son variables a la que cada worker puede agregar una operación que el conductor
de las operaciones solo puede leer. Esto es usado para la implementación de contadores en
MapReduce.