Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Spark
PARTE DE LA FORMACIÓN BIG DATA ACADEMY PERÚ
Ejecutar procesos
lo más rápido
posible
Naturaleza de
funcionamiento
Spark vs Hadoop
Spark puede
llegar a ser
hasta 100
veces más
rápido que
Hadoop
Si Spark es “mejor” entonces, ¿reemplaza
a Hadoop?
No, Spark es un motor de procesamiento, Hadoop es un ecosistema que incluye un motor de
procesamiento llamado MapReduce v2 y otros componentes (HDFS para almacenar en disco
duro, YARN para gestionar recursos). Spark no reemplaza a Hadoop, sino que lo potencia.
Spark ¿VS?
Motor de
procesamiento
Seleccionando el motor de
procesamiento: Spark vs MapReduce
Dependerá del caso de uso que se esté implementado. Spark es más rápido que MapReduce,
pero no por eso “mejor”. Spark es muy rápido, pero utiliza mucha memoria RAM. MapReduce es
más lento, pero ahorra mucha más RAM.
¿Tienes procesos prioritarios que deben acabar lo más rápido posible? SPARK
¿Tienes procesos del tipo ETL? MAPREDUCE
¿Tienes procesos que requieren una lógica tipo SQL?: MAPREDUCE
¿Tienes procesos que requieren de una programación funcional?: SPARK
¿Tienes procesos de minería de datos?: SPARK
Hive on Spark
Hive es una “fachada” (facade) que traduce código SQL al
código equivalente de algún motor de procesamiento. Por
defecto está configurado para funcionar sobre MapReduce,
Hive
SQL etl sobre Hadoop
pero podemos cambiarlo para que se ejecute sobre SPARK.
Diferencia en la velocidad
de lectura/escritura
Módulos de SPARK
Spark tiene cuatro módulos, cada uno de ellos está enfocado en cierto tipo de
programación:
1. Spark Core: Programación batch
in-memory
Spark
Streaming
Spark MLlib GraphX 2. Spark Streaming: Programación
Motor de
procesamiento
Motor de
analítica
Motor de
grafos micro-batch
Spark Core
3. Spark Mllib: Programación
Motor de procesamiento analítica
4. GraphX: Programación sobre
grafos
Variables en memoria
¿Cómo se crea una variable en memoria? ¿Y si tengo un archivo
muy grande?
88 bytes
var saludo = “hello world”
10GB
16GB RAM
16GB RAM
10GB
400GB
88 bytes
var saludo = “hello world”
En un clúster clásico
var archivoParte1 = readFile(/archivo/muy/grande.txt, 0%, 25%)
var archivoParte2 = readFile(/archivo/muy/grande.txt, 26%, 50%)
var archivoParte3 = readFile(/archivo/muy/grande.txt, 51%, 75%)
var archivoParte4 = readFile(/archivo/muy/grande.txt, 76%, 100%)
Slave
400GB <<Slave>> <<Slave>> <<Slave>> <<Slave>>
100GB
100GB 100GB
100GB
Slave
400GB <<Slave>> <<Slave>> <<Slave>> <<Slave>>
100GB
100GB 100GB
100GB
Codifiquemos…
Arquetipo de procesamiento en SPARK
rddRaw rddFormatted rddResult
Codifiquemos…
Procesando datos no estructurados: Un
contador de palabras PARALELIZAMOS (K,V)
(que, 1)
que (es, 1)
FORMAT es (la,1 ) MEZCLAMOS SUMAMOS
la
vida
(vida, 1) (K, [v1, v2, …]) (K, V)
(la, 1)
la (vida, 1) (que, [1, 1, 1]) (que, 3)
vida (es, [1, 1, 1, 1]) (es, 4)
Qué es la vida, que es la vida es (es, 1) (la, [1, 1, 1, 1]) (la, 4)
la vida es sueño la vida es sueño sueño (sueño , 1) (vida, [1, 1, 1, 1]) (vida, 4)
y los sueños y los sueños y (y , 1) (sueño, [1]) (sueño, 1)
sueños son, sueños son los (los , 1) (y, [1]) (y, 1)
qué es la vida que es la vida sueños (sueños , 1) (los, [1]) (los, 1)
una ilusión una ilusion sueños (sueños , 1) (sueños, [1, 1]) (sueños, 1)
READ qué es la vida que es la vida son (son, [1]) (son, 1)
un frenesí un frenesi que (son , 1) (una, [1]) (una, 1)
es (que, 1) (ilusion, [1]) (ilusion, 1)
la (es, 1) (un, [1]) (un, 1)
vida (la , 1) (frenesi, [1]) (frenesi, 1)
una (vida , 1)
ilusion (una , 1)
que (ilusion, 1)
es (que , 1)
la (es , 1)
vida (la , 1)
un (vida , 1)
frenesi (un , 1)
(frenesi , 1)
Programación
Codifiquemos…
¿Y cómo hago un JOIN o un GROUP BY?
Codifiquemos…
Agregando estructura a los RDD: Los
Dataframes
Codifiquemos…
Arquitectura de
componentes
Arquitectura de componentes
Hue
Explotación de datos
Sqoop
Ingesta datos
Hive
SQL sobre Hadoop
Map
Spark
Reduce v2
Map Motor de Motor de
Reduce v1 procesamiento procesamiento
<<Slave>> <<Slave>>
• Worker • Worker
Drivers y executors
Gateway Master Slave
DRIVER
Un executor es un contenedor de recursos computacionales (RAM y CPU)
Tuning
Codifiquemos…
Resumen
Resumen
Hablemos…