Está en la página 1de 32

Formación senior en

Spark
PARTE DE LA FORMACIÓN BIG DATA ACADEMY PERÚ

FORMADOR: ALONSO MELGAREJO [alonsoraulmgs@gmail.com]


Concepto
Spark
Es un motor de procesamiento distribuido paralelo in-
memory. Proporciana apis en Java, Scala, Python y R. Spark
mantiene la escalabilidad lineal y la tolerancia a fallos de
MapReduce, pero amplía sus bondades gracias a varias
funcionalidades.
Objetivo fundamental
Objetivo fundamental de Spark

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 HADOOP?: ¡NO! SPARK ON HADOOP

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.

SCRIPT HIVE SELECCIÓN DEL MOTOR


Map
SPARK
Reduce v2
Motor de Motor de
procesamiento procesamiento
Ejecución sobre MAPREDUCE
SET hive.execution.engine=mr;
YARN
Gestiona los recursos del clúster
Ejecución sobre SPARK
SET hive.execution.engine=spark;
¿Por qué SPARK es más rápido que
MapReduce?
MAPREDUCE

Lectura de datos Proceso A Lectura de datos Proceso B


de entrada de entrada
Datos en disco Datos in-memory Output intermedio Datos in-memory Output final escrito
escrito en disco duro en disco duro
SPARK

Lectura de datos Proceso A Lectura de datos Proceso B


de entrada de entrada
Datos en disco Datos in-memory Output intermedio Datos in-memory Output final escrito
escrito in-memory en disco duro

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

100GB <<Slave>> <<Slave>> <<Slave>> <<Slave>>

100GB 100GB
100GB

Archivo muy grande


Servidores de 256GB de RAM cada uno
RDD: Resilient Distributed Dataset
var archivoMuyGrande = readFile(/archivo/muy/grande.txt)

Slave
400GB <<Slave>> <<Slave>> <<Slave>> <<Slave>>

100GB 100GB 100GB

100GB

100GB <<Slave>> <<Slave>> <<Slave>> <<Slave>>

100GB 100GB
100GB

Archivo muy grande


Servidores de 256GB de RAM cada uno
Programación

Codifiquemos…
Arquetipo de procesamiento en SPARK
rddRaw rddFormatted rddResult

READ FORMAT PROCESS


(actions) (transformations) (transformations)

SPARK ejecuta su código de manera “lazy”: Agrupa un WRITE


(actions)
conjunto de “transformations”, pero no los ejecuta, sólo
realiza una ejecución cuando se ejecuta un “action”
Programación

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

RDD + METADATA = DATAFRAME


(CAMPO1 STRING,
CAMPO2 INT,
CAMPO3 DOUBLE,
…)
Equivalente de un GROUP BY
Programación

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

HDFS Motor de YARN


Almacena los datos en el clúster procesamiento Gestiona los recursos del clúster

Hadoop Core Utilitarios para el resto de módulos


Arquitectura de servicios
Arquitectura de servicios
Gateway Master Slave DESCRIPCIÓN

• Gateway: Nodo con la configuración de SPARK


<<Gateway>> <<Master>> <<Slave>> <<Slave>> y acceso a las shells
• Gateway • HistoryServer • Worker • Worker • HistoryServer: Almacena información sobre los
programas ejecutados sobre SPARK
• Worker: Realiza el procesamiento de las cargas
de trabajo

<<Slave>> <<Slave>>
• Worker • Worker
Drivers y executors
Gateway Master Slave

<<Gateway>> <<Master>> <<Slave>> <<Slave>> <<Slave>> <<Slave>>


• Gateway • HistoryServer • Worker • Worker • Worker • Worker

<<Slave>> <<Slave>> <<Slave>> <<Slave>>


• Worker • Worker • Worker • Worker
SCRIPT EXECUTORS

DRIVER
Un executor es un contenedor de recursos computacionales (RAM y CPU)
Tuning

Codifiquemos…
Resumen
Resumen

Hablemos…

También podría gustarte