Meetup de Apache Spark Madrid sobre los errores que todos cometemos en proyectos Big Data.
Como las animaciones no van muy bien podeis verla en el siguiente enlace:
https://docs.google.com/presentation/d/1W4Foy9u0NkZziQ36I5_00b_e-JlwhSshSFv-hcxaBpM/edit?usp=sharing
2. Presentación
Presentación
JORGE LÓPEZ-MALLA
Tras trabajar con algunas
metodologías tradicionales
empecé a centrarme en el
mundo del Big Data, del cual
me enamoré. Ahora soy
arquitecto Big Data en Stratio y
he puesto proyectos en
producción en distintas partes
del mundo.
5. 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?
6. 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
7. 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
8. 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
9. 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
10. • 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
11. • 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
12. • 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?
13. • 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.
15. 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.
16. 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.
18. 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!
21. Ú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.
22. • 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
23. 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!
26. 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
27. 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
29. 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.
30. 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.
37. 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
38. 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.
39. 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
40. 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)
42. 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)
43. 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)
45. 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”
46. 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!
52. 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
53. 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
55. 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!