Stratio Sparta, una forma muy simple de hacer agregaciones con Spark Streaming

Es frecuente tener la necesidad de reunir grandes cantidades de datos en tiempo real, así sean procedentes del empleo de un servicio, de redes sociales como Twitter o bien de un medio físico como es la meteorología. Una buena forma de procesar toda esta información es con Spark Streaming, para poder contar con en tiempo real de la información para ser servida, mas tiene un inconveniente: hay que programar la lógica. La gente de Stratio nos cuenta de qué manera eludir efectuar el desarrollo de la propia agregación de datos utilizando Stratio Sparta, que se hace cargo de reducir la información en salvaje para poder contar con de una información de utilidad para ser servida. Todo por medio de una interfaz web muy simple de utilizar y siendo absolutamente flexible. Tras el procesamiento, persistiremos el desenlace en un cluster de MongoDB y serviremos en streaming mediante WebSockets con Node.js. Stratio Sparta es una herramienta verdaderamente flexible y simple de utilizar, que nos deja efectuar transformaciones a la información en bárbaro con Morphline mediante su interfaz web y además de esto efectuar agregaciones por diferentes dimensiones y rangos de tiempo.

Primeros pasos con Stratio Sparta

Primeramente, debemos instalar Stratio Sparta siguiendo los pasos de la propia documentación. Si bien el ejemplo asimismo se puede efectuado con Stratio Manager, que se hace cargo de montar un cluster de tres máquinas con MongoDB, Stratio Sparta y Spark sobre Mesos, que nos deja administrar estas operaciones de mapreduce en nuestro cluster. Tras la instalación podemos ejecutar Stratio Sparta, que va a abrir su servicio en el puerto nueve mil noventa, donde vamos a poder iniciar a configurar los próximos parámetros: Input: es el origen de los datos y puede proceder de Flume, Kafka, RabbitMQ, de un Socket, de un WebSocket o bien de forma directa de Twitter. Output: podemos persistir o bien enseñar esta información de diferentes formas, como MongoDB, Elasticsearch, Cassandra, Parqué, Redis o bien de manera directa en un CSV o bien en pantalla. Políticas: acá está el grueso de la configuración y podemos hacer las próximas acciones: Configurar el input. Configurar los outpus. Efectuar transformaciones con Morphlines, de género de dato y de datas. Efectuar agregaciones, que pueden ser de diferentes dimensiones y diferente granuralidad de tiempo. Asimismo debemos efectuar alguna de las distintas funciones habituales en agrupaciones de datos (como count, sum, max, min…). Lo primero, en este caso de ejemplo vamos a coger los datos de la API de meetup.com que provee un WebSocket con la información que se crean o bien actualizando en el servicio, que más tarde añadiremos por país y vamos a hacer un recuento de acontecimientos por hora. Más tarde agregamos los tres nodos con MongoDB como output y establecemos el nombre de la compilación que producirá (entre otras muchas cosas). De toda la información en salvaje que nos provee el WebSocket, solo vamos a coger tres de los atributos y le vamos a dar el formato conveniente. Estableceremos como output de la transformación country, response y modified (este último para devolver desde Node.js las últimas actualizaciones sencillamente). undefined Tras establecer de qué forma va a ser la estructura de la información procesada, configuraremos una agregación o bien cubo de la próxima forma: Time dimension: nombre del atributo que contendrá la data por la que se añaden los datos (así sea por días, horas…). Granurality: rango de tiempo en el que se añade la información. En un caso así va a ser por cada hora. Dimensions: reunimos por country, si bien otra posible agregación sería la de country y response. Operators: acá vamos a hacer múltiples operaciones, la primera es el recuento de acontecimientos (count) y más tarde agregará el último valor de entrada de modified, que era cogido del atributo mtime del WebSocket (con lastValue). Y tras efectuar esta serie de acciones, solo debemos establecer la salida (que en un caso así es MongoDB) y ejecutar la política. Con esta información ya debería comenzar a generarse las agregaciones de la próxima forma: El desenlace lo tenemos en tiempo real en nuestro cluster de MongoDB, al que podemos hacerle consultas desde cualquier otra tecnología.

Servidor de WebSocket con Node.js

Para montar nuestro servidor de WebSocket conectado a MongoDB precisamos haber instalado los dos módulos (websocket y mongodb). Más tarde vamos a poder leer los registros en la base de datos que van a ser mandados después por WebSocket: var MongoClient = require('mongodb').MongoClient; MongoClient.connect('mongodb://localhost:27017/sparta', function(err, db) undefined); Tras ejecutar el script con node, se mostrará por consola el contenido de MongoDB. Tras revisar el acceso a la información vamos a crear nuestro servidor de WebSocket para poder comunicar en tiempo real los cambios producidos por Stratio Sparta. Para poder administrar todos y cada uno de los datos en tiempo real debemos hacer lo siguiente: Primeramente, cuando se conecte un nuevo cliente del servicio, debemos guardar la conexión que nos produce la propia API de WebSockets, para poder hacer un broadcast más tarde. De la misma manera que quitar la conexión tras la desconexión. Cuando se conecte un nuevo cliente del servicio debemos mandar todos y cada uno de los registros existentes hasta la data. Cada cierto tiempo mandamos los cambios que se han efectuado en MongoDB, utilizando el atributo modified para conocer cuáles son los últimos cambios. En el ejemplo, para no mandar demasiados datos de sobra, filtraremos los países que se mandarán. Asimismo filtraremos los atributos a mandar, puesto que solo usaremos el atributo country, hour y count. El ejemplo es breve y se puede preguntar en este gist.

Cliente de WebSocket con JavaScript

En el momento en que tenemos los datos en nuestro front-end, podemos mostrarlos en forma de gráfico, tabla o bien con el registro de la consola, por servirnos de un ejemplo. En un caso así mostraremos en forma de tabla esta información con console.table para hacer más fácil la visualización. var ws = new WebSocket('ws://127.0.0.1:8008/'); var data = undefined; ws.onmessage = function(response)undefined El desenlace es bien simple mas funcional: Asimismo podemos efectuar una visualización más estética con gráficos. Una forma de efectuar gráficas velozmente es con Chart.js. Sencillamente debemos formatear los datos a fin de que se ajusten al esquema de datos preciso para Chart.js y conseguiremos el próximo desenlace. Este caso de ejemplo tan simple de visualización de datos asimismo está libre en este gist. Es verdaderamente simple manipular información desde JavaScript y hay multitud de librerías de visualización de datos, lo que hace que sea trivial su empleo y visualización de datos generados desde agregaciones con Stratio Sparta, para poder producir informes y estadísticas. Algo que resulta considerablemente más eficaz si lo equiparamos con guardar todos y cada uno de los datos y más tarde procesarlos para mostrarlos. Vía | Stratio SyntaxHighlighter.all(); Asimismo te invitamos a JPA vs Hibernate Lo mejor del dos mil doce para turincon.net: proyecto Open Source más interesante ¿Qué es QA y por qué razón no debe faltar en tu proyecto? – La nueva Stratio Sparta, una forma muy simple de hacer agregaciones con Spark Streaming fue publicada originalmente en turincon.net por P. G. .