Publicado el 16 de Junio del 2019
8.149 visualizaciones desde el 16 de Junio del 2019
1,1 MB
87 paginas
Creado hace 8a (17/03/2017)
Máster en Big Data y Data Science
17/03/2017
Ecosistema Spark
Introducción a Apache Spark
Gonzalo Martínez Muñoz
Hadoop Map-Reduce. Contar palabras
Map
Reduce
Map Reduce
En un lugar de la Mancha,
de cuyo nombre no quiero
acordarme,
no ha mucho tiempo que
vivía
un hidalgo de los de lanza
en astillero,
…
{En: 1, un: 1,
lugar: 1…}
{de: 1, cuyo:
1, nombre:1}
…
{…}
a-c
c-h
x-z
{a: 43, …}
{de:14,ha:10,
…}
…
{…}
…
En Hadoop se
alterna disco
(lento) y cpu
…
Máster en Big Data y Data Science
Solución de spark
Usar memoria
1
Ecosistema Spark
Coste de la
memoria
Mínimo de
0’2 cent/MB
Disco
http://www.jcmit.com/mem2015.htm
Máster en Big Data y Data Science
Ecosistema Spark
2
¿Qué es Apache Spark?
Spark es una plataforma de
computación para clústers
Es de propósito general.
Desarrollo simplificado
Trabaja en memoria
Rápido
Permite trabajo interactivo,
streaming…
Máster en Big Data y Data Science
Ecosistema Spark
3
En qué mejora Spark a Hadoop
Velocidad
Simplicidad del API
Ejecución Batch, interactiva,
streaming vs solo batch en hadoop
Integra varias herramientas: SQL,
grafos, etc.
Varias APIs: Java, scala, R, python.
Hadoop solo java
Máster en Big Data y Data Science
Ecosistema Spark
4
Velocidad
Puede ser hasta 100x más rápido que Hadoop
Logistic regression in Hadoop and Spark
Máster en Big Data y Data Science
Ecosistema Spark
5
Ordenando 1PB. Resultados de 2014
https://databricks.com/blog/2014/11/05/spark-officially-sets-a-new-record-in-large-scale-sorting.html
Máster en Big Data y Data Science
Ecosistema Spark
6
Resultados de 2016. Spark primero en Cloud
http://sortbenchmark.org
Máster en Big Data y Data Science
Ecosistema Spark
7
Simplicidad
Contar
palabras
en
Hadoop
Contar palabras en Spark (python)
Máster en Big Data y Data Science
Ecosistema Spark
8
Aplicaciones
SQL
Streaming
GraphX
MLlib
Máster en Big Data y Data Science
Ecosistema Spark
9
Algunos hechos: salario por expertise
2014 Data Science Salary Survey, O’Reilly
800 respuestas
de 53 países y
41 estados de
EEUU
Máster en Big Data y Data Science
Ecosistema Spark
10
Historia
En 2009 surge dentro de un proyecto de
investigación en Berkeley
La idea era hacer algo rápido para consultas
interactivas. De aquí el utilizar datos en
memoria
En 2010 se hace de código abierto
En 2013 se transfiere a la fundación Apache.
Spin-off databricks
Actualmente en versión 2.1
Máster en Big Data y Data Science
Ecosistema Spark
11
Arquitectura
Muy versátil. Puede trabajar:
Standalone.
Sobre la nube de Amazon
Sobre Hadoop
Fuentes de datos:
Ficheros locales
HDFS
Cassandra
MongoDB
Hive
postgresQL, mySQL
S3 amazon
…
Máster en Big Data y Data Science
Ecosistema Spark
12
Aspectos básicos
pyspark: interfaz python a Spark. Nos permite
ejecutar tareas en paralelo de forma sencilla.
A partir de unos datos, se definirá una secuencia de
transformaciones y acciones que se ejecutan en
paralelo.
La gestión de la paralelización es transparente para el
programador
Máster en Big Data y Data Science
Ecosistema Spark
13
Aspectos básicos
Arrancar la consola interactiva ipython con Spark
> ruta/a/pyspark
Arrancar un notebook de Python con Spark
> IPYTHON_OPTS="notebook" ruta/a/pyspark
Tras arrancar el notebook se muestra el directorio
desde donde se arranca en el navegador
Máster en Big Data y Data Science
Ecosistema Spark
14
Aspectos básicos
Arrancar la máquina virtual:
vagrant up
Abrir en el navegador: http://localhost:8008
Abrir un notebook de pyspark
New→notebook→Pyspark (Py 2)
Esto arranca un notebook con el kernel pyspark
Cerrar la máquina virtual:
vagrant halt
Máster en Big Data y Data Science
Ecosistema Spark
15
Un programa spark
Los workers ejecutan el programa.
Tienen una cache (memoria) para
almacenar resultados intermedios
Driver program
SparkContext
Cluster manager
Driver es el que accede
a lo que hay por debajo.
Gestiona la ejecución de
los programas. En
pyspark se accede a
través de la variable:
sc
Worker program
…
Worker program
Executor
[Cache]
Executor
[Cache]
Datos: HDFS, ficheros, S3 amazon, etc
Máster en Big Data y Data Science
Ecosistema Spark
16
Resilient Distributed Datasets (RDDs)
Trabajaremos sobre colecciones de datos denominadas
RDD:
Es el concepto básico de trabajo en Spark
Son inmutables. Es decir una vez creados no se pueden
modificar.
Se pueden transformar para crear nuevos RDDs o realizar
acciones sobre ellos pero no modificar.
Se guarda la secuencia de transformaciones para poder
recuperar RDDs de forma eficiente si alguna máquina se cae
Están distribuidos en el clúster en los nodos workers
Máster en Big Data y Data Science
Ecosistema Spark
17
Ciclo de vida de una aplicación en Spark
RDD (Datos)
Serie de
transformaciones
cache
Serie de acciones
•Datos distribuidos
en los workers
•Inmutables
•Operaciones cuyo
resultado es otro
RDD
•No se ejecutan
inmediatamente
•Algún RDD se
puede mantener
en memoria
mediante la
función cache()
•Evita recalcular
•Operaciones que
devuelven
resultados al driver
•Desencadenan la
ejecución de las
transformaciones
definidas
Máster en Big Data y Data Science
Ecosistema Spark
18
Recordatorio funciones lambda de python
Son funciones anónimas. Por ejemplo, para sumar dos
números:
lambda a, b: a + b
Se pueden usar cuando haya que pasar una función
como parámetro
Tienen una única instrucción cuyo valor corresponde al
valor devuelto
Máster en Big Data y Data Science
Ecosistema Spark
19
Creación de RDD - textFile
Crea un RDD a partir del sistema local de archivos,
HDFS, Cassandra, HBase, Amazon S3, etc.
lineas = sc.textFile('elquijote.txt', 8)
Fichero de datos
El número de
particiones en que
se dividirá el
fichero (opcional)
Las elementos del RDD son cada línea del fichero. Es
decir, el RDD será una colección de cadenas
Evaluación perezosa
Máster en Big Data y Data Science
Ecosistema Spark
20
Creación de RDD - textFile
Otras opciones: Directorio, con comodines, desde
fichero comprimido,…:
lineas1 = sc.textFile("/my/directory")
lineas2 = sc.textFile("/my/directory/*.txt")
lineas3 = sc.textFile("/my/directory/*.gz")
Otros protocolos, HDFS, S3,…:
lineas1 = sc.textFile("hdfs://...")
lineas2 = sc.textFile("s3://...")
Máster en Big Data y Data Science
Ecosistema Spark
21
Creación de RDD - parallelize
Crea un RDD a partir de una lista python
numeros = sc.parallelize([1,2,3,4,5,6,7,8,9,10], 2)
Lista de python.
Puede ser de
números,
cadenas…
Evaluación perezosa
Número de
particiones en que
se dividirá la lista
(opcional)
Máster en Big Data y Data Science
Ecosistema Spark
22
Creación de RDD
Ejemplo evaluación perezosa
numeros = sc.parallelize([1,2,3,4,5,6,7,8,9,10])
print numeros.count()
Spark “apunta” qué va a pasar
No se calcula nada hasta que es necesario
RDD: numeros
[1, 2, 3,
4, 5, 6,
7, 8, 9,
10]
10
Máster en Big Data y Data Science
Ecosistema Spark
23
Transformaciones
Crean un RDD a partir de otro u otros RDDs
Evaluación perezosa. No se calculan los resultados
inmediatamente. Spark apunta la serie de
transformaciones que se deben aplicar para ejecutar
después.
Es como una receta
lineas.flatMap(...).filter(...).map(...).reduceByKey(...)
¿Os había dicho que no se evalúa directamente?
Evaluación perezosa!!!
Máster en Big Data y Data Science
Ecosistema Spark
24
Transformaciones generales
Transformación
Descripción
map(func)
filter(func)
flatMap(func)
distinct()
Crea un nuevo RDD a partir de otro aplicando una
transformación a cada elemento original
Crea un nuevo RDD a partir de otro manteniendo solo
los elementos de la lista original que cumplan una
condición
Como map pero cada elemento original se puede
mapear a 0 o varios elementos de salida
Crea un nuevo RDD a partir de otro eliminando
duplicados
union(otroRDD)
Une dos RDD en uno
sample()
Obtiene un RDD con una muestra obtenida con
reemplazamiento (o sin) a partir de otro RDD.
Ecosistema Spark
Máster en Big Data y Data Science
25
Transformación - map
Aplica una transformación a cada elemento del RDD original
numeros = sc.parallelize([1,2,3,4,5])
num3 = numeros.map(lambda elemento: 3*elemento)
Resultado: [1,2,3,4,5] [3,6,9,12,15]
La función que se pasa a map debe:
Función que se aplica a
cada elemento del rdd
números
Recibir un único parámetro, que serán elementos individuales del
rdd de partida
Devolver el elemento transformado
Máster en Big Data y Data Science
Ecosistema Spark
26
Transformación – cuestiones sobre el map
¿Cuál es el tamaño del rdd de salida?
El mismo que el tamaño de entrada
palabras = sc.parallelize(['HOLA', 'Que', 'TAL', 'Bien'])
pal_minus = palabras.map(lambda elemento: elemento.lower())
print pal_minus.collect()
RDD: palabras RDD: pal_minus
['HOLA',
'Que',
'TAL',
'Bien']
['hola',
'que',
'tal',
'bien']
['hola', 'que', 'tal', 'bien']
Máster en Big Data y Data Science
Ecosistema Spark
27
Transformación – cuestiones sobre el map
¿Podemos cambiar el tipo de los elementos de los RDDs
con un map?
No, los RDDs son inmutables!! Pero con map podemos crear nuevos RDDs
palabras = sc.parallelize(['HOLA', 'Que', 'TAL', 'Bien'])
pal_long = palabras.map(lambda elemento: len(elemento))
print pal_long.collect()
RDD: palabras
RDD: pal_long
['HOLA','Que'
,'TAL','Bien'
]
[4, 3, 3,
4]
[4, 3, 3, 4]
Máster en Big Data y Data Science
Ecosistema Spark
28
Transformación - filter
Filtra un RDD manteniendo solo los elementos que cumplan
una condición
numeros = sc.parallelize([1,2,3,4,5])
rdd = numeros.filter(lambda elemento: elemento%2==0)
Resultado: [1,2,3,4,5] [2,4]
La función que se pa
Comentarios de: Introducción a Apache Spark (0)
No hay comentarios