¿Por qué cambiar de Hadoop a Spark?
Teoria y ejemplos de nuestra experiencia
Gustavo Arjones
gustavo@socialmetrix.com
@arjones
Co-founder & CTO
Lic. Ciencias Computación
MBA Marketing Servicios
@arjones
gustavo@socialmetrix.com
linkedIn.com/in/arjones
Brasileño, en ARG desde 2008
Gustavo Arjones
#1 Interacción
Razones para elección
•  Reducir las incertimdubres del proyecto
•  HiveQL à SQL menor ramp-up
•  Hadoop/Hive tenía soporte en AWS
•  Proof of Concept funcionó correctamente
•  Pruebas con DynamoDB demonstraron ser muy costosas
Empiezan los
problemas
HQL	
  complejas	
  
son	
  para	
  escribir	
  
una	
  vez	
  y	
  nunca	
  
más	
  entenderlas!	
  
Hive es difícil de testear
•  Frameworks de tests para Hive no están maduros y son dificiles
de implementar.
•  Gastamos mucho tiempo y recursos escribiendo validadores de
procesos y métricas
No están las últimas versiones de Hive en AWS
•  Se había lanzado Hive 0.13 hacias 4+ meses y nosotros todavía
teníamos Hive 0.12 en AWS
•  Perdíamos la dinámica de un proyecto con muchas features
nuevas y mejoras de performance
MySQL retrasaba los jobs
•  Cuando los MapReduce jobs terminanban y había que enviar los
datos a MySQL, estaba tomando 2x más tiempo que el MR de
cálculo.
•  Problemas típicos de MySQL, pérdida de performance en grande
volúmenes de datos
•  Limite de escalabilidad
Y como resultado …
•  Bugs aumentando
•  Tiempo de proyecto dilatandose
•  Baja reutilización de codigo
•  Problemas que atraparías en COMPILE-TIME terminan en
RUNTIME – porque es SQL!
¿Qué hacemos?
Seguimos por el mismo camino?
•  Probar Pig
•  Probar Cascading (o Scalding)
•  Probar Hbase
Pero seguíamos preocupados con
el tiempo de ejecución!
¿Probamos el
framework que
la gente viene
hablando?
Qué es Spark?
Apache Spark™ is a fast and general engine for large-scale data
processing.
•  Procesamiento In-memory (preferencialmente)
•  Framework de Procesamiento Unificado
•  Para Ingenieros & Data Scientists
Principales Pilares
Task Scheduler
•  Prepara los jobs a traves de DAG (Directed acyclic
graph)
•  Enganchan funciones para ejecutar los stages
•  Cache-aware; considera data utilización &
localización (data locality)
•  Partitioning-aware para reducir shuffles por la red
RDD (Resilient Distributed Datasets)
• 	
  Estructura de datos Immutable (In-memory)
•  Tolerante a fallas (Se reama en caso de falla)
•  Estructura de datos que puede ser operada en
paralelo
• Rica interfaz de Transformations & Actions
DEMO – Word Count (el hello world de BigData)
¿Por qué nos
gusta?
Viene de buen “origen”
BDAS, the Berkeley Data Analytics Stack (AMPLAB)
Plataforma Unificada
Plataforma Unificada (lines of code)
0
20000
40000
60000
80000
100000
120000
140000
Hadoop
MapReduce
Storm
(Streaming)
Impala (SQL) Giraph
(Graph)
Spark
non-test, non-example source lines (2014 numbers)
GraphX
Streaming
SparkSQL
Proyecto muy activo (y ganando tracción) ’13-’14
Proyecto muy activo 2015
h;ps://twi;er.com/bigdata/status/610482424741367809	
  
Y más …
•  Esfuerzo para estandarización de la plataforma
•  Certificación para Distros
& Apps gratis
•  Material de training gratis
•  Databricks levantó $47M
•  Databricks Cloud (?)
Ventajas de la Plataforma Unificada
•  No es necesario copiar datos/ETL entre sistemas
•  Varios procesamientos en el mismo código (claridad)
•  Reutilización de código (Batch & Realtime)
•  Un único sistema para aprender ß Happy Devs
•  Ops: Un único sistema para mantener ß Happy Ops
Big Deal para
Arquitectura Lambda
Compacto y poderoso
•  Escrito en Scala, con wrappers para Python, Java* y R
API muy expresiva
Ver: https://spark.apache.org/docs/latest/api/scala/#org.apache.spark.rdd.RDD
+
SQL
+
Data
Frames
•  Aprender, prototipado rápido
•  Análisis interactivo sobre los datos
Consola interactiva (REPL)
Version Web de Spark-Shell – similar a Python Notebooks
Spark UI
h;ps://databricks.com/blog/2015/06/22/understanding-­‐
your-­‐spark-­‐applicaMon-­‐through-­‐visualizaMon.html	
  
Soporte Datasources
h;p://spark-­‐packages.org	
  
Spark SQL Demo
Código Testeable!
•  El contexto puede crear RDD
Easy Deployment
•  Local-mode (development)
•  Standalone (bare metal)
•  Standalone + Amazon AWS
•  Mesos
•  Yarn
Components for distributed execution in Spark
Y Hadoop?
Spark Or Hadoop -- Which Is
The Best Big Data Framework?
http://www.forbes.com/sites/bernardmarr/
2015/06/22/spark-or-hadoop-which-is-the-best-
big-data-framework/
Modelo Map-Reduce
iter. 1 iter. 2 . . .
Input
HDFS
read
HDFS
write
HDFS
read
HDFS
write
Input
query 1
query 2
query 3
result 1
result 2
result 3
. . .
HDFS
read
Lento porque necesita replicación, serialización y I/O
iter. 1 iter. 2 . . .
Input
Distributed
memory
Input
query 1
query 2
query 3
. . .
one-time
processing
10-100× más rápido
Spark (in-memory + DAG execution engine)
Spark y Hadoop pueden ser amigos
•  No hay HDFS en Spark – ver Tachyon
•  Acceso HDFS / S3
•  YARN
•  Usando Input/Output formats de Hadoop
Log Analyzer
https://www.gitbook.com/book/
databricks/databricks-spark-reference-
applications/details
Entonces todo es
perfecto? Nop …
•  Long Jobs
•  Serialization Issues
•  OOM
•  Data Locallity
http://blog.cloudera.com/blog/2015/05/
working-with-apache-spark-or-how-i-
learned-to-stop-worrying-and-love-the-
shuffle/
Donde aprender
más?
Mucha documentación disponible
Official Documentation
https://spark.apache.org/
Spark Summit 2015 - Slides and Video
https://spark-summit.org/2015/
Blog Official Databricks
https://databricks.com/blog
Personal notes about Apache Spark
http://arjon.es/tag/spark/
No te gustó
Spark?
Apache Flink
http://flink.apache.org
Gracias & Obrigado!
Gustavo Arjones
gustavo@socialmetrix.com
@arjones

¿Por que cambiar de Apache Hadoop a Apache Spark?