Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Pablo Acuña Storm: Procesamiento distribuido de datos. Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by-nc-sa/3.0/ c_b_n_a Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Contenidos - Presentación - ¿Qué es Storm? - Arquitectura y componentes básicos - Ejemplo - storm-contrib - Enlaces interesantes 2 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Pablo Acuña (@pacunar) Tema de investigación: Uso de Redes Sociales en situaciones de emergencias 3 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos ¿Qué es Storm? “Storm es un sistema de computación en tiempo real distribuido, de código libre y abierto” (storm-project.net) - Escalable e interoperable Tolerancia a fallos Garantía de procesamiento Multi-lenguaje Fácil de montar, utilizar y operar Es “el Hadoop del procesamiento de flujos de datos en tiempo real ” Benchmark: 1 millón de mensajes (100b) / por segundo / por nodo 4 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Arquitectura • Se ejecutan topologías • 2 tipos de nodos: master and workers • Nimbus (master) • Supervisors (workers) • Zookeeper 5 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Componentes básicos • Topologías: • Conjunto de nodos en un grafo • Ejecutable • Streams (flujos de datos): • Secuencia ilimitada de tuplas • Spouts: • Origen de un stream • Diferentes orígenes • Bolts: • Reciben, procesan y emiten streams Storm proporciona las interfaces para implementar topologías, spouts y bolts. 6 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Spouts Reciben cualquier origen de datos para emitir streams a la topología • Conexión a una API • Kafka, Kestrel, RabbitMQ • Sensores • Logs • Bases de datos • Etc. 7 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Spouts: Funciones principales - open Inicialización - nextTuple Recoger y emitir tuplas - declareOutputFields Declaración de campos Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Bolts Procesan la información recibida, ejecutando la lógica de la aplicación y emitiendo nuevas tuplas • Extiende a BaseBasicBolt o BaseRichBolt • Funciones principales: - prepare* execute declareOutputFields cleanUp* * No necesarios en BaseBasicBolt 9 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Topologías • Se ejecuta indefinidamente (hasta que uno finalice el proceso) • Definen qué spouts y bolts forman el grafo de computación, conectando cada nodo • Definen configuración para su ejecución • Lanza la ejecución de la topología en local o remoto. 10 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Topologías • La clase TopologyBuilder es utilizada para unir los nodos • Al asignar un Bolt a la topología (método setBolt), se asigna un Grouping: • shuffleGrouping • fieldsGrouping • globalGrouping • noneGrouping • allGrouping • customGrouping • El método submitTopology envía la topología para su ejecución en el cluster • Ejecución Local (dev) y Remota (prod) Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Streams • Permite definir flujos de datos entre los nodos de una topología. • Cada nodo define un stream_id y los campos (Fields) que enviará bolt topología Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Ejemplo • Obtener tweets del Streaming API de Twitter, obtener los TOP 5 hashtags en base a un keyword. • Necesitamos: • Twitter4j • Storm (0.8.2) • Java 6 o 7 • Maven (para ejecución remota) 13 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Storm UI (puerto 8080) 14 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos storm-contrib (https://github.com/nathanmarz/storm-contrib) • Repositorio de spouts, bolts, librerías, módulos para usar con Storm - storm-cassandra Bolts para guardar datos en Apache Cassandra - storm-mongo Bolts y Spouts para utilizar MongoDB - storm-rdbms Bolt para crear y almacenar datos en un RDBMS (tupla fila) - storm-kafka Spout para recibir mensajes desde Apache Kafka - storm-redis Spout para recibir mensajes desde REDIS PubSub 15 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Enlaces interesantes: - http://storm-project.net/ https://github.com/apache/incubator-storm Mailing-lists: [email protected] y [email protected] https://twitter.com/stormprocessor https://github.com/nathanmarz/storm/wiki ¿Qué me he dejado fuera? - Trident - Multilenguajes - Cluster Management Y mucho más! - Workers vs. Executors vs. Tasks - Logging - Configuración 16 Leganés 6-7 Febrero 2014 Storm: Procesamiento distribuido de datos Gracias!! ¿Preguntas, comentarios?