taller big data - parte 1 · de particiones (evita trasiego de datos)...

25
Taller Big Data - Parte 1 Carlos Eiras Franco Department of Computer Science University of A Coru˜ na (Spain) Carlos Eiras Franco EVIA - Junio 2016 1/25

Upload: others

Post on 14-Aug-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Taller Big Data - Parte 1

Carlos Eiras Franco

Department of Computer ScienceUniversity of A Coruna (Spain)

Carlos Eiras Franco EVIA - Junio 2016 1/25

Page 2: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Big data y Data Science

”Data Science es el arte de transformar losdatos en acciones”

The field guide to Data Science - Booz Allen Hamilton

Carlos Eiras Franco EVIA - Junio 2016 2/25

Page 3: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Procesamiento distribuido y origen de Spark

Las herramientas para Big DataProcesamiento distribuido y origen de Spark

Carlos Eiras Franco EVIA - Junio 2016 3/25

Page 4: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Procesamiento distribuido y origen de Spark

SupermaquinasEl software tradicional para analizar datos se ejecuta en una sola maquina.

https://en.wikipedia.org/wiki/Supercomputer

Mas datos→ Aumentar la potencia de la maquina→ Caro e insuficiente.

Carlos Eiras Franco EVIA - Junio 2016 4/25

Page 5: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Procesamiento distribuido y origen de Spark

Procesamiento distribuidoAgrupaciones de ordenadores de consumo domestico.

https://en.wikipedia.org/wiki/Computer cluster

Traslada la complejidad al software.

Carlos Eiras Franco EVIA - Junio 2016 5/25

Page 6: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Procesamiento distribuido y origen de Spark

Complicaciones del procesamientodistribuido

• HW de consumo falla mucho→ Tolerancia a fallos

• No todos los ordenadores procesan igual de rapido→Sincronizacion

• Comunicacion por red lenta→ Evitar envıo de informacion

Carlos Eiras Franco EVIA - Junio 2016 6/25

Page 7: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Procesamiento distribuido y origen de Spark

MapReduceEn 2004 Google presento el paradigma MapReduce.

1 Dividir el trabajo en tareas independientes

2 Procesar cada tarea independientemente (Map)

3 Juntar los resultados parciales (Reduce)

No importa el orden ni la velocidad de ejecucion.

Implementado en Hadoop

Carlos Eiras Franco EVIA - Junio 2016 7/25

Page 8: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Procesamiento distribuido y origen de Spark

InconvenienteHadoop almacena los datos entre pasos MapReduce.

Spark intenta mantener los datos en memoria el mayor tiempo posible.

Carlos Eiras Franco EVIA - Junio 2016 8/25

Page 9: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Spark brevemente

RDDsLos Resilient Distributed Datasets son el nucleo de Spark, sobre el que se

realizan todas las operaciones.

Resilient→ Spark se ocupa de reconstruirlos si se han tenido que borrar.

Sobre este objeto se realizan operaciones y Spark se ocupa de que selleven a cabo en el entorno distribuido.

Carlos Eiras Franco EVIA - Junio 2016 9/25

Page 10: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Spark brevemente

Ciclo de vida de los RDDs1 Creacion: A partir de una variable, fichero u otra fuente de datos.

2 Transformaciones: Operaciones map

3 Acciones: Operaciones reduce

4 Almacenamiento: Si se requiere salvar el dataset transformado.

Carlos Eiras Franco EVIA - Junio 2016 10/25

Page 11: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Spark brevemente

OrganizacionLas maquinas del cluster pueden tener dos roles:

• El driver distribuye y coordina las tareas.

• Los workers ejecutan el trabajo.

Entre ambos puede haberun gestor del cluster (p.e.

Yarn o Mesos) o no(modo standalone).

Carlos Eiras Franco EVIA - Junio 2016 11/25

Page 12: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Tutorial Spark

Tutorial Spark - Requisitos• Python

• Spark (archivo comprimido)

• Zip de contenidos del curso(http://tinyurl.com/EVIA2016-TallerBD)tutorial.html

Carlos Eiras Franco EVIA - Junio 2016 12/25

Page 13: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Tutorial Spark

Lanzar pySpark

Consola python con variables precargadas.

Carlos Eiras Franco EVIA - Junio 2016 13/25

Page 14: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Ejercicio 1

Ejercicio 1

Carlos Eiras Franco EVIA - Junio 2016 14/25

Page 15: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

Trampas comunesPuntos habituales de perdida de eficiencia

Carlos Eiras Franco EVIA - Junio 2016 15/25

Page 16: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

1. Pasos map mal optimizadosLa funcion map se envıa (con todas las variables de su closure) a cada

particion y se ejecuta una vez por cada elemento.

<CODE >>incremento=5 #Variable local>rddEnteros.map(lambda x: x+incremento) #Suma 5 a cada elemento

Es importante:

• Escribir funciones eficientes

• Evitar variables pesadas en el closure.Si es muy grande→ Broadcast

Carlos Eiras Franco EVIA - Junio 2016 16/25

Page 17: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

1. Pasos map mal optimizadosLa funcion map se envıa (con todas las variables de su closure) a cada

particion y se ejecuta una vez por cada elemento.

<CODE >>incremento=5 #Variable local>rddEnteros.map(lambda x: x+incremento) #Suma 5 a cada elemento

Es importante:

• Escribir funciones eficientes

• Evitar variables pesadas en el closure.Si es muy grande→ Broadcast

Carlos Eiras Franco EVIA - Junio 2016 16/25

Page 18: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

1. Pasos map mal optimizadosLa funcion map se envıa (con todas las variables de su closure) a cada

particion y se ejecuta una vez por cada elemento.

<CODE >>incremento=5 #Variable local>rddEnteros.map(lambda x: x+incremento) #Suma 5 a cada elemento

Es importante:

• Escribir funciones eficientes

• Evitar variables pesadas en el closure.Si es muy grande→ Broadcast

Carlos Eiras Franco EVIA - Junio 2016 16/25

Page 19: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

1. Pasos map mal optimizados<CODE >>variable grande=list(xrange(10000000))>broadcastVG=sc.broadcast(variable grande)>rddEnteros.map(lambda x: x+broadcastVG.value[5]) #Suma 5 a cadaelemento (el quinto elemento del array)

Carlos Eiras Franco EVIA - Junio 2016 17/25

Page 20: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

2. GroupByKey vs ReduceByKeyNo utilizar GroupByKey cuando se pueda utilizar ReduceByKey, porque

requiere mover todos los datos.

Carlos Eiras Franco EVIA - Junio 2016 18/25

Page 21: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

2. GroupByKey vs ReduceByKey

GroupByKey primero agrupa y luego requiere un paso de reduccion

Carlos Eiras Franco EVIA - Junio 2016 18/25

Page 22: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

2. GroupByKey vs ReduceByKey

ReduceByKey solo requiere transmitir un valor por clave desde cada nodo

Carlos Eiras Franco EVIA - Junio 2016 18/25

Page 23: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Trampas comunes

3. Particionado inadecuado

El particionado determina como se reparten los datos entre los nodos.Carga equilibrada→ Mayor paralelismo

<CODE >>cualquierRDD.repartition(numero particiones) #Reparte de nuevotodos los datos>cualquierRDD.coalesce(numero particiones) #Decrementa el numerode particiones (evita trasiego de datos)>cualquierRDD.getNumPartitions() #Indica de cuantas particiones secompone

Carlos Eiras Franco EVIA - Junio 2016 19/25

Page 24: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Otras utilidades

Interfaz webPermite comprobar el estado de los trabajos mientras se ejecutan.

http://localhost:4040 - Mientras se esta ejecutando

Carlos Eiras Franco EVIA - Junio 2016 20/25

Page 25: Taller Big Data - Parte 1 · de particiones (evita trasiego de datos) >cualquierRDD.getNumPartitions() #Indica de cuantas particiones se ... Taller Big Data - Parte 1 Author: Carlos

Otras utilidades

Lanzar aplicacionesspark-submit <nombre aplicacion>

Deberemos definir el SparkContext en nuestra aplicacion

<CODE >from pyspark import SparkContext, SparkConfconf = SparkConf()

.setAppName(”ejercicio2”)

.setMaster(”local[8]”)#Se puede definir con un parametro despark-submitsc = SparkContext(conf=conf)

Carlos Eiras Franco EVIA - Junio 2016 21/25