introducción a apache spark a través de un caso de uso cotidiano
Post on 05-Jul-2015
384 Views
Preview:
DESCRIPTION
TRANSCRIPT
Procesamiento de datos Procesamiento de datos robusto y escalable con robusto y escalable con
Apache SparkApache Spark
Ing. Adrián Fernando Fiore
Ingeniero en Sistemas UTN FRBADocente de Algoritmos y Estructura de Datos
Desarrollador Backend en Socialmetrix
@AdrianFiore
Ing. Pablo Romanelli
Ingeniero en Sistemas UTN FRBADocente de Técnicas Avanzadas de Programación
Desarrollador Scala en Socialmetrix
@PabloRomanelli2
Agenda
• Qué hacemos?• Problema a resolver• Evolución de la solución• Spark• Resolución del problema• Ventajas obtenidas
Medimos la actividad de las compañías y personalidades en las redes sociales para
generar valor a profesionales de Marketing, Investigación de Mercado y Producto.
Software As A Service
Problema
Econtrar cuantas veces una cuenta de Twitter es mencionada junto
con un hashtag
Restricciones:•En un intervalo de tiempo•Para un conjunto finito de cuentas y tweets
Necesitamos una herramienta de procesamiento distribuido para grandes
volúmenes de datos!!!
Evolución de la soluciónHadoop Map ReduceHadoop Map Reduce
Ventajas• Escalable (voy creciendo a demanda)• Se puede usar Amazon EMR (fácil de administrar)• No hay costo de licencias, solo levantar los servers
Desventajas• Hay que implementar la lógica en términos de map
y reduce• Se necesita mucho código para implementar
acciones simples como join, group, etc.• Es batch, lento (baja a disco por cada etapa de
procesamiento)
Apache HiveApache Hive
Ventajas• Capa de abstracción sobre Hadoop Map Reduce
(tenemos todas sus ventajas)• La lógica se implementa en SQL (algo ya conocido
que me abstrae del código complejo de map y reduce)
Desventajas• Lenguaje SQL no está orientado a flujo de datos
sino a consultas• No hay un IDE de desarrollo• Difícil de testear, difícil de encontrar bugs• Tiempos de ejecución prolongados y variables
Evolución de la solución
Apache SparkApache Spark
• Motor de procesamiento distribuido para Big Data• Puede utilizarse sobre Java, Scala o Python
• Por qué lo elegimos?• Qué ventajas nos trae?• Cómo resulvo el problema usando Spark?
Evolución de la solución
Ejemplos para entender el problema{ "text": "@adrian vamos a la #javaconf", "user": { "screen_name": "pablo", ... }, "entities": { "hashtags": [ { "text": "javaconf", ... } ], "user_mentions": [ { "screen_name": "adrian", ... } ], ... }, ...}
List((adrian, javaconf)
)ResultadoResultado
Ejemplos para entender el problema
{ "text": "Hola @adrian", "user": { "screen_name": "pablo", ... }, "entities": { "hashtags": [ ], "user_mentions": [ { "screen_name": "adrian", ... } ], ... }, ...} List()ResultadoResultado
Ejemplos para entender el problema
{ "text": "Codeando en #spark", "user": { "screen_name": "pablo", ... }, "entities": { "hashtags": [ { "text": "spark", ... } ], "user_mentions": [ ], ... }, ...} ResultadoResultado List()
Ejemplos para entender el problema{ "text": "@adrian aca en #javaconf usando #spark", "user": { "screen_name": "pablo", ... }, "entities": { "hashtags": [ { "text": "javaconf", ... }, { "text": "spark", ... } ], "user_mentions": [ { "screen_name": "adrian", ... } ], ... }, ...}
List((adrian, javaconf),(adrian, spark)
)
ResultadoResultado
"text": "@adrian aca en #javaconf usando #spark", "user": { "screen_name": "pablo", ... }, "entities": { "hashtags": [ { "text": "javaconf", ... }, { "text": "spark", ... } ], "user_mentions": [ { "screen_name": "adrian", ... } ], ...
Ejemplos para entender el problema{ "text": "RT @pablo: @adrian aca en #javaconf usando ...", "user": { "screen_name": "pedro", ... }, "entities": { "hashtags": [ { "text": "javaconf", ... } ], "user_mentions": [ { "screen_name": "adrian", ... }, { "screen_name": "pablo", ... } ], ... },
"retweeted_status": {…},...
}
List((adrian, javaconf),(adrian, spark),(pablo, javaconf),(pablo, spark)
)
Res
ult
ado
Res
ult
ado
Ejemplos para entender el problema
List(List(
(adrian, javaconf)),List(),List(),List(
(adrian, javaconf), (adrian, spark)),List(
(adrian, javaconf), (adrian, spark),(pablo, javaconf), (pablo, spark)
))
List((
(adrian, javaconf),3
),(
(adrian,spark),2
),(
(pablo,javaconf),1
),(
(pablo,spark),1
))
Algunos ejemplos en Spark Shell
Ejemplos para entender el problema
List(List(
(adrian, javaconf)),List(),List(),List(
(adrian, javaconf), (adrian, spark)),List(
(adrian, javaconf), (adrian, spark),(pablo, javaconf), (pablo, spark)
))
Tweets en Json
Ejemplos para entender el problema
List((adrian, javaconf),(adrian, javaconf),(adrian, spark),(adrian, javaconf),(adrian, spark),(pablo, javaconf),(pablo, spark)
)
List(List(
(adrian, javaconf)),List(),List(),List(
(adrian, javaconf), (adrian, spark)),List(
(adrian, javaconf), (adrian, spark),(pablo, javaconf), (pablo, spark)
))
flatMapflatMap
Ejemplos para entender el problema
List(( (adrian, javaconf), 1 ),( (adrian, javaconf), 1 ),( (adrian, spark), 1 ),( (adrian, javaconf), 1 ),( (adrian, spark), 1 ),( (pablo, javaconf), 1 ),( (pablo, spark), 1)
)
List((adrian, javaconf),(adrian, javaconf),(adrian, spark),(adrian, javaconf),(adrian, spark),(pablo, javaconf),(pablo, spark)
)
mapmap
Ejemplos para entender el problema
List(( (adrian, javaconf), 3 ),( (adrian, spark), 2 ),( (pablo, javaconf), 1 ),( (pablo, spark), 1 )
)
List(( (adrian, javaconf), 1 ),( (adrian, javaconf), 1 ),( (adrian, spark), 1 ),( (adrian, javaconf), 1 ),( (adrian, spark), 1 ),( (pablo, javaconf), 1 ),( (pablo, spark), 1)
)
reduceByKeyreduceByKey
https://github.com/socialmetrix/spark-javaconf
Código FuenteCon la resolución paso a paso
Ventajas que nos da Spark
•Es open source, comunidad activa, suben material online
•Consola interactiva para hacer pruebas
•Lenguaje de programación (Scala, Java, Python):• Programo en un lenguaje que conozco• Puedo usar mis abstracciones (mis tipos de datos)• Tengo un IDE que me ayuda a codear, a hacer refactors, etc.• Las funciones del RDD se comportan igual que las de las listas (me abstrae que
luego corre distribuido)
•Testeable y Mantenible:• Código corto y claro• Me genera confianza en mi proceso• Si hay un bug, puedo hacer un nuevo test y reproducirlo
•Consola de monitoreo simple y útil
Pablo y Adrián
jobs@socialmetrix.com
MUCHAS GRACIAS!
Consultas
top related