meetup errores en proyectos big data

59
Errores que todos cometemos en proyectos Big Data Julio 2016 Meetup

Upload: jorge-lopez-malla

Post on 15-Apr-2017

217 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Meetup errores en proyectos Big Data

Errores que todos cometemos en proyectos Big DataJulio 2016

Meetup

Page 2: Meetup errores en proyectos Big Data

Presentación

Presentación

JORGE LÓPEZ-MALLA

Tras trabajar con algunasmetodologías tradicionalesempecé a centrarme en el

mundo del Big Data, del cualme enamoré. Ahora soy

arquitecto Big Data en Stratio yhe puesto proyectos en

producción en distintas partesdel mundo.

Page 3: Meetup errores en proyectos Big Data

Jorge López-Malla Matute

ÍNDICE

[email protected]

Stratio

123

Empecemos por el principio: conceptos

Errores en Proyectos en Batch (Con Spark)

Errores en Proyectos en Streaming (Con Spark)

4 Ruegos, preguntas e historias de abuelo cebolletas

Page 4: Meetup errores en proyectos Big Data

Empecemos por el principio: conceptos

1

Page 5: Meetup errores en proyectos Big Data

Conceptos

• ¿Qué es el Big Data?

• ¿Todas las BBDD NoSQL son BBDD Big Data?

• ¿Qué quiere decir que un problema es horizontalmente escalable y que quiere decir que es verticalmente escalable?

Empezamos por el principio: Conceptos

• ¿Qué es Hadoop?

Page 6: Meetup errores en proyectos Big Data

Prerrequisitos

• La diversidad y cantidad de fuentes requiere un estudio exhaustivo previo.

• Los datos casi nunca están tan “limpios” como nos dicen o creemos

• Un fallo en una fuente no puede parar el proceso

Empezamos por el principio: Conceptos

Page 7: Meetup errores en proyectos Big Data

Tecnologías

• Debido al boom del Big Data han salido infinidad de nuevas tecnologías

• Dado que los proyectos Big Data suelen ser proyectos de innovación se busca usar la última versión de la última tecnología

• Aunque tenemos distintas opciones para el almacenamiento distribuido de la información tendemos a querer usar una sóla solución para todo.

Empezamos por el principio: Conceptos

Page 8: Meetup errores en proyectos Big Data

Repositorios Distribuidos

• Nombramos como BBDD repositorios distribuidos de datos que no lo son (Elastic Search, HDFS, ….)

• Hay que tener en cuenta la variedad de claves en las BBDD de Clave Valor

Empezamos por el principio: Conceptos

Page 9: Meetup errores en proyectos Big Data

HDFS + Parquet

• Una de las soluciones más usadas por su versatilidad y eficiencia.

• Parquet NO convierte a HDFS en una BBDD.

• Aunque Parquet tenga un formato columnar sigue siendo un formato de ficheros.

Empezamos por el principio: Conceptos

Page 10: Meetup errores en proyectos Big Data

• Errores típicos:

Escribir directamente a HDFS con formato Parquet:

Las principales herramientas de ETL no distribuidas de Big Data no ofrecen esta posibilidad.

Para salvar la información con formato Parquet hay que usar un esquema compatible con la herramienta que lo procese más tarde

Tendríamos que hacer un proceso que leyera de HDFS para luego ingestar en Parquet.

HDFS + Parquet

Empezamos por el principio: Conceptos

Page 11: Meetup errores en proyectos Big Data

• Errores típicos:

Intentar Actualizar/Borrar en Parquet

HDFS + Parquet

Empezamos por el principio: Conceptos

file1.parquet file1.parquetProceso Spark

/folder/parquet /tmp/parquet

mv de HDFSBorrado de

HDFS

file1.parquet

Borrado de HDFS

Page 12: Meetup errores en proyectos Big Data

• Errores típicos:

¿Tienes realmente un problema de Streaming?

Streaming

Empezamos por el principio: Conceptos

¿De verdad?

¿Tienes la tecnología de ingesta de datos necesaria para ingestar tus datos en Tiempo Real?

Page 13: Meetup errores en proyectos Big Data

• Errores típicos:

¿El cliente tiene claro que el proceso de Machine Learning requerirá de su o de la intervención de un tercero?

Machine Learning

Empezamos por el principio: Conceptos

Debido a la inmadurez de algunos algoritmos de Machine Learning usados en entornos Big Data nos tenemos que cercioranos de su performance.

Page 14: Meetup errores en proyectos Big Data

Errores en proyectos Batch usando Spark

2

Page 15: Meetup errores en proyectos Big Data

Introducción

Errores en proyectos Batch usando Spark

• Aunque se hable de Batch para diferenciar las distintas “patas” de Spark, se hace referencia al core

• Cualquier cambio para mejorar que se haga con estas instrucciones vale para las demás “patas”.

• Se hace referencia principalmente a HDFS pero es extensible a cualquier repositorio de información distribuido (teniendo en cuenta las particularidades de cada uno).

• Se explica todo para Spark 1.6.2 dado que Spark 2.0 acaba de salir.

Page 16: Meetup errores en proyectos Big Data

Excepciones

Errores en proyectos Batch usando Spark

• Errores típicos:

Mi trabajo de Spark ha fallado por una excepción y la traza de la aplicación no me dice nada útil.

Si el fallo se ubica en actor distribuido (Executor) puede que la traza no sea lo suficientemente verbosa en el Application.

Page 17: Meetup errores en proyectos Big Data

• Actores involucrados en Spark

Excepciones

Errores en proyectos Batch usando Spark

Driver

Worker-1

Worker-2

Worker-3

SparkMaster Executor-2

Executor-1

Executor-3

Page 18: Meetup errores en proyectos Big Data

Excepciones

Errores en proyectos Batch usando Spark

• Ayudas

Revisar log de las distintas máquinas virtuales involucradas en un job de Spark

La localización de estos log se define por configuración.

La Spark web es tu amiga ¡úsala!

Page 19: Meetup errores en proyectos Big Data

Excepciones

Errores en proyectos Batch usando Spark

Page 20: Meetup errores en proyectos Big Data

Excepciones

Errores en proyectos Batch usando Spark

Page 21: Meetup errores en proyectos Big Data

Última partición infinita

Errores en proyectos Batch usando Spark

• Errores típicos:

Mi trabajo de Spark se queda trabado en la última partición.

Casi con total seguridad NO es la última partición.

Normalmente está asociado a una mala distribución de las claves.

Page 22: Meetup errores en proyectos Big Data

• Una partición mucho más grande

Última partición infinita

Errores en proyectos Batch usando Spark

Driver

Executor-1

Executor-2

Executor-3

RDD1 = 10.7G

= 100 Mb

= 10 Gb

Page 23: Meetup errores en proyectos Big Data

Paralelismo

Errores en proyectos Batch usando Spark

• Ayudas:

No suele haber solución “fácil”

La web de Spark nos puede dar la pista (sobre todo a partir de qué nos pitan el DAG 1.4)

Coalesce/reparttion son nuestros amigos

¡Cuidado con el Shuffle!

Page 24: Meetup errores en proyectos Big Data

Paralelismo

Errores en proyectos Batch usando Spark

• repartition/coalesce:

= 100 Mb

= 10 Gb

coalesce

= 1,52 Gb

Page 25: Meetup errores en proyectos Big Data

Paralelismo

Errores en proyectos Batch usando Spark

• Ayudas:

Page 26: Meetup errores en proyectos Big Data

Paralelismo

Errores en proyectos Batch usando Spark

• Errores típicos:

Al aumentar mi input el tiempo de procesamiento de mi trabajo crece de manera no orgánica con el crecimiento de mis datos.

Es uno de los problemas más típicos cuando ingestamos nuestros datos de manera secuencial, diaria/mensual, dentro de un mismo repositorio de datos, sobre todo HDFS.

Primero revisar memory leaks dentro de nuestras fases.

Puede ser un problema de paralelismo

Page 27: Meetup errores en proyectos Big Data

Paralelismo

• Como paraleliza Spark el trabajo.

HDFS

/user/folder2

/user/folder2

1G

1M 1M 1M

1G

Job1

Job2

Errores en proyectos Batch usando Spark

1G1G

1M1M 1M

Spark

Page 28: Meetup errores en proyectos Big Data

Paralelismo

• Como paraleliza Spark el trabajo.

HDFS

/user/folder2

/user/folder2

1G

1M 1M 1M

1G

Job1

Job2

Errores en proyectos Batch usando Spark

1G1G

1M1M 1M

SparkIngesta

1M 1M 1M

1M 1M 1M 1M 1M 1M

1M1M 1M

1M1M 1M 1M1M 1M

Page 29: Meetup errores en proyectos Big Data

Paralelismo

Errores en proyectos Batch usando Spark

• Soluciones:

Determinar de antemano las unidades mínimas de computación.

Hacer un proceso de “actualización” de los datos

Hay que tener en cuenta los problemas de Actualización de HDFS

Si estamos hablando de HDFS y ficheros en “crudo” llamar periódicamente al método getMerge.

Page 30: Meetup errores en proyectos Big Data

Paralelismo

Errores en proyectos Batch usando Spark

• Errores típicos:

Al aumentar el tamaño de memoria de mis procesos no estoy notando mejora o al aumentar el número de cores para realizar mis trabajos no estoy encontrando mejora ninguna

Normalmente quiere decir que no has encontrado tu paralelismo ideal para tu trabajo.

Page 31: Meetup errores en proyectos Big Data

Paralelismo

• Pocos cores y mucha memoria

Errores en proyectos Batch usando Spark

Driver

Executor-1

Executor-2

Executor-3

RDD1 = 5g

= 512 Mb

= 1Gb

2 cores6 Gb

2 cores6 Gb

2 cores6 Gb

Page 32: Meetup errores en proyectos Big Data

Paralelismo

• Sólo aumentamos memoria :(

Errores en proyectos Batch usando Spark

Driver

Executor-1

Executor-2

Executor-3

RDD1 = 5g

= 512 Mb

= 1Gb

2 cores8 Gb

2 cores8 Gb

2 cores8 Gb

Page 33: Meetup errores en proyectos Big Data

• ¡Solución!

Paralelismo

Errores en proyectos Batch usando Spark

Driver

Executor-1

Executor-2

Executor-3

RDD1 = 5g

= 512 Mb

= 1Gb

3 cores3 Gb

3 cores3 Gb

3 cores3 Gb

Page 34: Meetup errores en proyectos Big Data

• Muchos cores y poca memoria

Paralelismo

Errores en proyectos Batch usando Spark

Driver

Executor-1

Executor-2

Executor-3

RDD1 = 5g

= 512 Mb

= 1Gb

3 cores1 Gb

3 cores1 Gb

3 cores1 Gb

Page 35: Meetup errores en proyectos Big Data

• Sólo aumentamos cores :(

Paralelismo

Errores en proyectos Batch usando Spark

Driver

Executor-1

Executor-2

Executor-3

RDD1 = 5g

= 512 Mb

= 1Gb

4 cores1 Gb

4 cores1 Gb

4 cores1 Gb

Page 36: Meetup errores en proyectos Big Data

• ¡Solución!

Paralelismo

Errores en proyectos Batch usando Spark

Driver

Executor-1

Executor-2

Executor-3

RDD1 = 5g

= 512 Mb

= 1Gb

3 cores3 Gb

3 cores3 Gb

3 cores3 Gb

Page 37: Meetup errores en proyectos Big Data

Paralelismo

Errores en proyectos Batch usando Spark

• Ayudas:

No suele ser fácil/automatico encontrar la combinación ideal

Son necesarias varias ejecuciones y jugar con valores máximos para evitar OOM.

Por norma prima el paralelismo (cores) a la memoria (Gigas), siempre que se haga una solución escalable.

Más sencillo lanzando el trabajo sobre Mesos/YARN

Page 38: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

• Errores típicos:

Al hacer una fase de combinación, mi trabajo se traba.

Suele ocurrir cuando hacemos operaciones que no son eficientes, groupByKey, al hacer la agregación

Error bastante común para los que vienen del “mundo Hadoop”

Revisar la distribución de las claves.

Page 39: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

Odon, F

Infor, H

Odon, F

Infor, F

Odon, H

Odon, F

Infor, H

Odon, F

Infor, H

Infor, H

Infor, H

Odon (F, F, H, F, F)

Infor (H, F, H, H, H, H)

Odon 80,00

Infor 16,66

GroupByKey

Page 40: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

• GroupByKey:

Contras

Todos los valores de una misma clave se copian a la misma partición pudiendo dar problemas de memoria

Se multiplica la escritura en disco. (Sí, Spark escribe en disco)

Pros:

Nos permite hacer todo tipo de operaciones (alguna vez es inevitable usar el groupByKey)

Page 41: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

• GroupByKey:

Page 42: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

Odon, F

Infor, H

Odon, F

Infor, F

Odon, H

Odon, F

Infor, H

Odon, F

Infor, H

Infor, H

Infor, H

Odon (66.66, 3)

Infor (50.0, 2)

aggregateByKey

Odon (100.0, 2)

Infor (0.0, 1)

Infor (0.0 , 2)

Infor (0.0 , 2)

Odon (80.0, 5)

Infor (16.66, 6)

Page 43: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

• aggregateByKey:

Contras

No permite hacer todo tipo de operaciones (Sólo aquellas conmutativas y asociativas)

Pros:

Sólo se escribe a disco un valor por clave y partición.

Minimiza al máximo las escrituras a disco (más aún con el proyecto Tugnsten)

Page 44: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

• AggregateByKey:

Page 45: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

• Ayudas:

Evitar el Shuffle sobre todas las cosas.

Usar la Spark Web cuando se hagan procesos para ver el gráfico del DAG.

Siempre hacer join del RDD más “pequeño”

Page 46: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

• Errores típicos:

Al juntar dos RDD mi trabajo se traba.

join es una de las operación más comunes dentro de Spark

Si al hacerlo tenemos problemas de performance tendremos que revisar los partitioner de los RDD involucrados

las variables de broadcast son nuestras amigas, ¡úsalas!

Page 47: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

RDD1 = 15g

RDD1 = 1M

Page 48: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

Page 49: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

Page 50: Meetup errores en proyectos Big Data

Mezcla de datos

Errores en proyectos Batch usando Spark

Page 51: Meetup errores en proyectos Big Data

Errores en proyectos Streaming usando Spark

3

Page 52: Meetup errores en proyectos Big Data

Introducción

Errores en proyectos Streaming usando Spark

• El tiempo real empieza a ser una realidad en nuestras casuísticas de Big Data

• Auge de nuevas tecnologías de procesamiento en paralelo con naturaleza Streaming

• Aunque hay mejoría en Spark 2.0, y más en futuras versiones de la misma, esta charla se explicará usando Spark 1.6.2 dado que Spark 2.0 acaba de salir

Page 53: Meetup errores en proyectos Big Data

Delay excesivo

Errores en proyectos Streaming usando Spark

• Errores típicos:

Mi trabajo de Spark en Streaming va aumentando el retardo en tiempo hasta que llega a minutos(u horas o dias).

Suele pasar en soluciones en las que se ha diseñado sin pensar en cómo procesa Spark en Streaming.

Pasa en escenarios en los que los datos no crecen de manera orgánica

Page 54: Meetup errores en proyectos Big Data

• ¿Cómo funciona Spark Streaming?(a alto nivel)

Delay excesivo

Errores en proyectos Streaming usando Spark

Batch interval

Reciver

RDD1 RDD2 RDD3 RDD4

RDD1 RDD2 RDD3

RDD5

RDD4

RDD6

RDD5

RDD7

RDD6

Page 55: Meetup errores en proyectos Big Data

Delay excesivo

Errores en proyectos Streaming usando Spark

• Ayudas

Cuando se diseñe la solución hay que tener en cuenta los picos, tanto alto como bajos de nuestro proceso Streaming.

Estimar recursos siendo pesimistas nos suele ayudar, aunque sobredimensionemos nuestro aplicativo

Una vez más, la spark Web es nuestra amiga, ¡úsala!

Page 56: Meetup errores en proyectos Big Data

Ruegos, preguntas e historias de abuelo cebolletas

4

Page 57: Meetup errores en proyectos Big Data

Preguntas

Ruegos, preguntas e historias de abuelo cebolletas

Page 58: Meetup errores en proyectos Big Data

¡Esto es todo amigos!MUCHAS GRACIAS Y ANIMAROS A COMPARTIR CONOCIMIENTO

Page 59: Meetup errores en proyectos Big Data