Tutorial en Apache Spark - Clasificando tweets en realtime

  • View
    1.864

  • Download
    2

Embed Size (px)

DESCRIPTION

Apache Spark [1] es un nuevo framework de procesamiento distribuido para big data, escrito en Scala con wrappers para Python, que viene generando mucha atención de la comunidad por su potencia, simplicidad de uso y velocidad de procesamiento. Ya siendo llamado como el remplazo de Apache Hadoop. Socialmetrix desarrolla soluciones en este framework para generar reportes y dashboards de información a partir de los datos extraídos de redes sociales. Los participantes de este tutorial van aprender a levantar información de Twitter usando Spark Streaming, Desarrollar algoritmos para calcular hashtags más frecuentes, usuarios más activos en batch processing aplicarlos en realtime a los nuevos tweets que lleguen a través del stream.

Text of Tutorial en Apache Spark - Clasificando tweets en realtime

  • 1. Tutorial en Apache SparkClasificando Tweets en RealtimeGustavo Arjonesgustavo@socialmetrix.com@arjones

2. AGENDA Qu es Apache Spark? Introduccin a Scala Crear un pipeline con Apache Spark (Word Count) Cargar JSON de Tweets (Statuses) Crear un programa que consume del stream (simulado) Obtener los lenguajes de programacin ms hablados Por usuario, por url, por localizacin 3. Qu esApache Spark? 4. Qu es Spark?Apache Spark is a fast and general engine for large-scale dataprocessing. Procesamiento In-memory (preferentemente) Framework de Procesamiento Unificado Para Ingenieros & Data Scientists 5. Principales PilaresTask Scheduler Prepara los jobs a travs de DAG (Directed acyclic graph) Concatena funciones para ejecutar los stages Cache-aware; considera utilizacin & localizacin de datos(data locality) Partitioning-aware para reducir shuffles por la redRDD (Resilient Distributed Datasets)Estructura de datos Inmutable (In-memory) Tolerante a fallas (Se rearma en caso de falla) Estructura de datos que puede ser operada en paralelo Rica interfaz de Transformations & Actions 6. Plataforma Unificada 7. Hands On! 8. DISCLAIMERPara que los ejercicios sean realizados dentro del tiempoestablecido para el laboratorio los datasets son chicos.Las soluciones que desarrollamos ac pueden escalarpara cientos de servidores y Terabytes de datosLas tcnicas se aplican a mayor Volumen y Velocidad:Internet Of Things (IoT), Logs, games, mobile, etc 9. Introduccin a#Scala 10. Declarando Variablesvaldeclaravariablesinmutables(finalenJava) 11. Declarando FuncinCrear una funcin que calcule el valor al cubodefdeclarafuncinscala> cube(10)res0: Int = 1000 12. Usar MAPNOTA: Es una funcin, no la estructura de datos!Aplicar la funcin cube() a la lista de nmeros myNumbersscala> myNumbers.map(cube(_))scala> myNumbers.map(cube) 13. Usar Map and TuplesTuples son estructura auxiliares que permiten llevar multiplosvalores sin necesidad de crear clases (VO)scala> myNumbers.map(n => (n, cube(n)))res1: List[(Int, Int)] = List((1,1), (2,8), (5,125), (4,64), (7,343), (3,27))scala> myNumbers.map(n => (n, cube(n))).foreach(println)(1,1)(2,8)(5,125)(4,64)(7,343)(3,27) 14. Usar FilterAplicar Filter a la lista myNumbers dejando solo imparesscala> myNumbers.filter(n => (n % 2) == 1)res6: List[Int] = List(1, 5, 7, 3)scala> myNumbers.filter(_ % 2 == 1)res6: List[Int] = List(1, 5, 7, 3) 15. Usar ReduceSumar todos los elementos de la listascala> myNumbers.reduce((x, y) => x + y)res10: Int = 22scala> myNumbers.reduce(_ + _) 16. CHALLENGESumar todos los nmeros pares en el rango de 0-99TIP:scala> val numbers = Range(0, 100)numbers: scala.collection.immutable.Range = Range(0, 1, ..)scala> numbers.filter(_ % 2 == 0).reduce(_ + _)res2: Int = 2450 17. Creando elprimero pipelinecon ApacheSparkCdigo Fuente:https://github.com/socialmetrix/wisit14 18. Contar Palabras 19. data/don-quijote.txt.gz 20. data/don-quijote.txt.gz 21. data/don-quijote.txt.gz 22. data/don-quijote.txt.gz 23. data/don-quijote.txt.gz 24. data/don-quijote.txt.gz 25. data/don-quijote.txt.gz 26. Apache Spark es Lazy!Viste que no pas nada hasta la ltimalinea?Nada es procesado entreTransformaciones.Solo se ejecuta cuando se realiza unaAccin (top) 27. API muy expresiva, mucho ms operaciones!Ver: https://spark.apache.org/docs/latest/api/scala/#org.apache.spark.rdd.RDD 28. CHALLENGEEl resultado no es muy interesante, porque las principalespalabras son stopwords, remueverlas para dar mayor significado 29. ManipulandoTweets 30. PropuestaCrear un listado de los lenguajes ms tweetados, similar al listado delenguajes que crea Githubhttp://adambard.com/blog/top-github-languages-2014/ 31. Consideraciones Dataset contiene un JSON por linea (one-liner) Hay que interpretar JSON Pueden haber erroes en los JSON Lineas vacias Lineas malformadas / Diferentes schemas 32. Obtener las TOP HASHTAGS (batch mode)Ver archivo./src/main/scala/smx/sql/TopHashtags.scalaCompilar y Ejecutar./sbt/sbt assemblyspark-submit --class smx.sql.TopHashtags target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar data/tweets-20141126-sample.json 33. Procesandotweets enReal-time 34. Stream es una secuencia de RDD 35. StreamingVer archivos./src/main/scala/smx/utils/SocketServer.scalaIniciar SocketServer (simula Twitter Streaming)java -cp target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar smx.utils.SocketServer data/tweets-20141126-sample.json 36. Streaming (cont.)Ver archivo./src/main/scala/smx/stream/StreamProcessor.scalaIniciar Streaming Processorspark-submit --class smx.stream.StreamProcessor target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar 37. h)p://localhost:4040/ 38. CHALLENGECambiar de Hashtags para TOP UsuariosTIP:El usuario es user.screen_name en el JSON 39. Usando SparkStreaming con Twitter(necesita conexin de internet)Training Oficial 2014Stream Processing with Spark Streaminghttps://databricks-training.s3.amazonaws.com/realtime-processing-with-spark-streaming.html 40. Donde aprenderms? 41. Mucha documentacin disponiblehttps://spark.apache.org/documentation.htmlhttp://spark-summit.org/2014/traininghttp://arjon.es/tag/spark/http://www.slideshare.net/frodriguezolivera/apache-spark-41601032First Steps to Scalahttp://www.artima.com/scalazine/articles/steps.htmlhttp://shop.oreilly.com/product/0636920028512.do 42. Gracias & Obrigado!Gustavo Arjonesgustavo@socialmetrix.com@arjonesjobs@socialmetrix.com