Introducción a IBM InfoSphere Streams y SPL

Analizando "Big data" en movimiento

El análisis de grandes volúmenes de datos "al vuelo" debe ser considerado por cualquier organización que utilice información en tiempo real. IBM InfoSpere Streams complementa a las soluciones de "Big Data" basadas en Hadoop o Data Warehouses, al permitir analizar gran cantidad de datos y generar resultados con una muy baja latencia, sin necesidad de almacenarlos persistentemente.

Alexander Ambriz Rivas, Client Technical Professional, IBM

Alexander Ambriz RivasAlexander Ambriz Rivas es especialista técnico para el área de Information Management de IBM Software Group México, desde enero de 2010. En este rol, Alexander se encarga de apoyar técnicamente en labores de preventa para soluciones de Master Data Management (MDM) y Big Data. Alexander cuenta con 12 años de experiencia en el desarrollo de sistemas de software empresariales. Antes de unirse a IBM, Alexander participó en proyectos de software basados en Java Enterprise Edition con Multipack, Banco Azteca, Metlife y Telcel, entre otros. Además de las áreas de MDM y Big Data, Alexander está interesado en temas de Arquitectura Orientada a Servicios (SOA) y tecnologías Java. Alexander es Ingeniero en Computación por la Universidad Nacional Autónoma de México y Maestro en Ciencias con especialidad en Tecnología de Software, por la Hochschule für Technik Stuttgart, Alemania.



21-08-2012

“Big Data” en movimiento

Si bien no existe una definición universal para el término "Big Data", hay tres características (mencionadas por primera vez en un reporte de investigación de Gartner) que suelen utilizarse para describir dicho término, :

  • Volumen: en términos de Petabytes.
  • Variedad: información semi-estructurada o "no-estructurada" (texto, imágenes, video), además de la información "estructurada" (representada tradicionalmente de forma tabular).
  • Velocidad: alta tasa de crecimiento en la información y necesidad de respuesta rápida por parte de las aplicaciones.

Además de las "3 V" originales descritas por Gartner, recientemente se ha agregado la "Viscosidad" como una "cuarta V" para describir Big Data.

En principio, al hablar de soluciones de "Big Data" suele pensarse en Hadoop, o bien en soluciones de repositorios de datos (Data Warehousing) con capacidades de MPP (Massively Parallel Processing). Ambos tipos de soluciones pueden manejar altos volúmenes de información. Respecto a la variedad, las soluciones basadas en Hadoop son particularmente útiles para analizar información "semi-estructurada" o "no-estructurada", mientras que los repositorios de datos son en general más apropiados para la información "estructurada". En ambos casos, la información puede analizarse a alta velocidad, una vez cargada en la solución.

Sin embargo, tanto para las soluciones de repositorio de datos como para las de Hadoop, es importante considerar que primero hay que cargar los datos para después analizarlos. La velocidad en el análisis está por lo tanto limitada a qué tan rápido se pueda cargar la información.

¿No sería de gran valor tener la capacidad de analizar los datos al momento que estos se generan? Existe una gran área de oportunidad para el análisis de datos "en tiempo real" o "al vuelo", por ejemplo:

  • En el monitoreo de signos vitales en unidades de cuidados intensivos: ingestar y correlacionar múltiples variables (temperatura, presión, ritmo cardiaco, etc.) para detectar patrones que indiquen una situación que amenace la vida del paciente.
  • "Algorithmic Trading": Analizar las variaciones de los mercados de valores en tiempo real para recomendar (e incluso ejecutar) transacciones de compra-venta de acciones.
  • Monitoreo medioambiental: analizar variables meteorológicas (precipitación, presión atmosférica, velocidad del viento) y las generadas por otro fenómenos naturales (señales sismológicas, descargas químicas en el ambiente) para determinar riesgos de catástrofes.

Todos los casos de uso mencionados arriba cumplen con el criterio de las "4 V" que definen Big Data. Pero. Respecto el criterio de velocidad, en todos los ejemplos anteriores se requiere una respuesta en tiempo real para tener un beneficio tangible: un enfermo en estado crítico no puede esperar a que sus parámetros vitales se carguen a un repositorio de datos con horas de retraso para ser analizados, en ese caso los datos sólo servirían para un análisis post-mortem (literalmente). De manera análoga, sería de relativa poca utilidad limitarse al análisis histórico del comportamiento del mercado de valores, si no se tiene la capacidad de reaccionar en tiempo real a las variaciones para ajustar las estrategias de compra/venta de acciones.

El paradigma de "stream computing" tiene por objetivo ayudar a resolver el problema del análisis de datos en movimiento. Es posible definir el stream computing como la ingestión continua de datos para su análisis en tiempo real.

La Figura1 muestra la diferencia conceptual entre el procesamiento de datos estáticos vs. el procesamiento de datos en movimiento. El procesador de datos estáticos asume que los datos están guardados en un repositorio persistente, sobre el que se ejecutan consultas o análisis. Por otro parte, en una aplicación de "stream computing" se evaluan datos en movimiento vs. consultas o análisis modelados en la plataforma.

Figura 1. Vista conceptual de datos estáticos vs. datos en movimiento
Vista conceptual de datos estáticos vs. datos en movimiento

Es importante destacar que el "stream computing" no pretende sustituir otras técnicas de análisis de datos (como repositorios de datos y Hadoop). Por el contrario, intenta complementarlas, al procesar datos "al vuelo", sin necesidad de que se almacenen para su análisis.

Si bien el concepto de stream computing no es nuevo, hasta hace relativamente poco tiempo, la única forma de desarrollar soluciones de análisis de datos en tiempo real era utilizando lenguajes de relativamente bajo nivel. Tal enfoque demanda un gran esfuerzo de implementación y, en ciertos casos, incluso es dependiente del procesador en que se ejecute el programa correspondiente.

Una solución de análisis de "Big Data" en movimiento es IBM InfoSphere Streams, capaz de procesar los datos en tiempo real. Es importante destacar el término "solución" en este caso, pues además de contar con un poderoso lenguaje de alto nivel para procesamiento de flujos de datos, InfoSphere Streams provee características de facilidad de uso, administración y seguridad propias de cualquier software de uso empresarial.


Introducción a IBM InfoSphere Streams

IBM InfoSphere Streams es una plataforma de análisis de datos en tiempo real con micro-latencia. En vez de recopilar los datos, guardarlos y luego analizarlos, InfoSphere Streams aplica el análisis a los datos en movimiento. El análisis puede disparar eventos o alertas, de manera que se pueda reaccionar en tiempo real. Por ejemplo, una aplicación de monitoreo medioambiental hecha con InfoSphere Streams podría alertar cuando hay riesgo de una erupción volcánica para notificar a las zonas aledañas, que así podrían tomar medidas preventivas.

Superficialmente, parecería que InfoSphere Streams es otra solución de Procesamiento Complejo de Eventos (CEP por sus siglas en inglés). No obstante, InfoSphere Streams está diseñado para ser más escalable y soportar flujos de datos a un mayor ritmo que las soluciones tradicionales de CEP. Por ejemplo, TD Bank (un banco basado en Toronto) ha desarrollado junto con IBM Research el prototipo más rápido del mundo para Algorithmic Trading, capaz de procesar 5 millones de opciones de valuación por segundo (20 veces más rápido que la solución más rápida hasta ese momento).

InfoSphere Streams es una plataforma porque se pueden construir aplicaciones para resolver múltiples tipos de problemas que requieran el procesamiento de datos en tiempo real.

Las aplicaciones de InfoSphere Streams se modelan como un grafo, en que los nodos representan operadores o adaptadores, y los bordes representan el flujo de datos entre los operadores y adaptadores.

Un adaptador es un componente que sirve para entrada o salida de datos. Existe una amplia variedad de adaptadores, desde los que permiten entrada/salida básica a partir de archivos y sockets (TCP/UDP); hasta adaptadores especializados para protocolos como ODBC, colas de mensajes, HTTP, LLM (Low-Latency Messaging), y FIX (Financial Information eXchange). Los adaptadores se clasifican en adaptadores de entrada (sources) y adaptadores de salida (sinks).

Por otro lado, los operadores sirven para modelar la lógica del análisis sobre los datos. Existen desde operadores muy simples para hacer agregación de datos, pasando por otros que pueden realizar análisis estadísticos, hasta muy complejos que permiten hacer minería de datos en tiempo real.

La Figura 2 muestra un grafo que describe visualmente una aplicación de InfoSphere Streams.

Figura 2. Grafo que representa una aplicación de InfoSphere Streams

La unidad básica para representar datos en InfoSphere Streams se llama "tupla". Una tupla es una colección de atributos. Podría decirse que una tupla de InfoSphere Streams es análoga a un registro en una base de datos relacional. En forma más general, una tupla sigue el patrón de Data Transfer Object, es decir, es un objeto que mantiene datos, mas no tiene comportamiento.

Un flujo (stream) de datos es una secuencia (idealmente infinita) de tuplas. InfoSphere Streams puede analizar tuplas individualmente (por ejemplo, evaluar una tupla vs. un modelo predictivo) o bien analizar conjuntos finitos de tuplas, conocidos como ventanas. Por ejemplo, para realizar análisis estadísticos sobre un conjunto de tuplas. Es posible definir ventanas de diferentes tipos, por ejemplo, por número de tuplas, por periodos, o limitadas mediante "marcadores" insertados según la lógica de negocios.

Es importante señalar para realizar su trabajo, InfoSphere Streams mantiene en memoria RAM todos los datos necesarios. Por lo tanto, las aplicaciones que analicen ventanas muy grandes requerirán mayor cantidad de memoria que aquellas aplicaciones que trabajen sobre ventanas pequeñas o tuplas individuales.

Además de proveer un modelo de programación para diseñar aplicaciones que manejen flujos de datos en tiempo real, InfoSphere Streams permite modelar el diseño físico de la solución. Este consiste en uno o varios nodos físicos. La cantidad de nodos se determina con base en los requerimientos de volumen de datos a procesar y latencia del análisis. Finalmente, InfoSphere Streams permite modelar el despliegue de la aplicación en el ambiente físico, pudiendo incluso desplegar los elementos de procesamiento en diferentes nodos, para optimizar el uso de recursos. Por ejemplo, es posible asignar una parte de la aplicación con alta demanda de entrada/salida a nodos con hardware específico (por ejemplo, tarjetas de red o buses más rápidos), mientras que partes de la aplicación que sean de procesamiento intensivo podrían desplegarse en nodos con procesadores más poderosos. Los diferentes modelos de una aplicación de InfoSphere Streams se presentan en la Figura 3.

Figura 3. Modelo lógico, físico y de despliegue de una aplicación de InfoSphere Streams
Modelo lógico, físico y de despliegue de una aplicación de InfoSphere Streams

Una capacidad destacable respecto a la administración de InfoSphere Streams es que permite modificar dinámicamente las características físicas y de despliegue de una aplicación: por ejemplo, es posible agregar nuevos nodos a un clúster sin necesidad de reiniciar la plataforma o la aplicación.

La plataforma de tiempo de ejecución (runtime) de InfoSphere Streams requiere del sistema operativo Red Hat Enterprise Linux 5 ó 6, y puede correr sobre hardware basado en x86 (32 ó 64 bits) o bien IBM POWER7 (64 bits).


Streams Processing Language (SPL)

SPL es el lenguaje mediante el que se crean las aplicaciones para InfoSphere Streams. Mediante SPL se representan textualmente los grafos discutidos en la sección anterior. SPL es un lenguaje de alto nivel sumamente productivo. SPL se compila para generar un código binario ejecutable, que se despliega en la plataforma de ejecución.

Esta sección sólo intenta dar una breve introducción a SPL, la especificación completa del lenguaje junto con ejemplos y tutoriales detallados puede encontrarse en el IBM InfoSphere Streams V2.0 Information Center.

A grandes rasgos, los componentes de SPL son los siguientes:

Adaptadores: mediante estos componentes se ingresan y extraen datos de InfoSphere Streams. Los adaptadores para entrada de datos se conocen como "Sources" y los de salida como "Sinks". Estos componentes vienen por pares, es decir, para cada tipo de entrada/salida, existe un adaptador "source" y un adaptador "sink". InfoSphere Streams provee como parte de SPL los siguientes adaptadores:

  • FileSource/FileSink: Para entrada/salida a archivos. Éstos pueden ser de texto o binarios.
  • TCPSource/TCPSink y UDPSource/UDPSink: Utilizados para entrada/salida de sockets, ya sean TCP o UDP.
  • Además de los adaptadores "out-of-the-box", se han desarrollado adaptadores para otros protocolos. Dichos adaptadores son parte de librerías de componentes, conocidas como "toolkits" en InfoSphere Streams. Algunos adaptadores disponibles son para protocolos como: ODBC, colas de mensajes, HTTP, LLM (Low-Latency Messaging), y FIX.

Operadores: Sirven para procesar los datos (tuplas o ventanas de tuplas) de un stream de información. Existen los siguientes tipos de operadores:

  • Filter: Remueve tuplas de un stream de datos con base en el criterio especificado. Por ejemplo, pudieran descartarse tuplas con valores nulos en ciertos atributos, suponiendo que esos nulos indican algún error que viene desde la fuente de datos original.
  • Functor: Transforma tuplas de un stream. Por ejemplo, suponiendo que un atributo de la tupla tenga una magnitud (longitud) en unidades de Sistema Inglés, y se quiera transformar a Sistema Métrico Decimal.
  • Punctor: Agrega "puntuación" a un stream de datos, separándolo en múltiples ventanas. Supongamos que por ejemplo el análisis requiere que cada 1000 tuplas se calcule un promedio de un valor contenido en la tupla. El punctor podría contar las tuplas que pasan por él y al alcanzar el tamaño de la ventana, agregar una puntuación que defina las ventanas de 1000 tuplas, y reiniciar su contador para empezar con la siguiente ventana.
  • Sort: regresa las tuplas que recibe ordenadas. Este operador trabaja sobre ventanas de tuplas.
  • Join: toma 2 o más streams y los une en caso de que exista un "match" entre atributos de las tuplas. Es análogo a los "joins" que se pueden realizar entre tablas de una base de datos relacional (pero en este caso, los datos están "en movimiento").
  • Aggregate: sumariza valores de las tuplas contenidas en una ventana, por ejemplo, para obtener sumas, promedios, máximos y mínimos
  • Beacon: genera tuplas según criterios definidos. Es útil durante el desarrollo y pruebas de las aplicaciones de InfoSphere Streams, para simular los datos de fuentes que pudieran no estar disponibles.
  • Throttle y Delay: aceleran o frenan el flujo de datos en un stream. Por ejemplo, si un stream de salida será enviado (mediante un Sink) a un sistema que sólo puede procesar 1000 tuplas/segundo, un Delay puede colocarse antes del Sink para asegurar que se enviaran las tuplas a ese ritmo.
  • Split y Union: dividen o unen un stream de datos, respectivamente.

Cabe destacar que SPL puede extenderse mediante los lenguajes C++ o Java, por lo que es posible desarrollar nuevos adaptadores y operadores, de acuerdo a las necesidades.

Este mecanismo de extensibilidad ha sido utilizado para desarrollar librerías ("toolkits") de componentes, capaces de facilitar el desarrollo de aplicaciones para InfoSphere Streams. El instalador de Infosphere Streams incluye los siguientes toolkits:

  • Big Data Toolkit: para integrar InfoSphere Streams con soluciones basadas en Hadoop, proporcionando operadores para leer y escribir de HDFS.
  • Database Toolkit: para integración con base de datos relacionales, vía ODBC.
  • Internet Toolkit: soporta los protocolos HTTP, HTTPS, FTP y FTPS.
  • Mining Toolkit: permite evaluar tuplas vs. modelos predictivos modelados utilizando Predictive Model Markup Language (PMML).
  • Financial Services Toolkit: proporciona adaptadores para el protocolo FIX. Además proporciona operadores que facilitan el desarrollo de aplicaciones para Algorithmic Trading.
  • Text Toolkit: proporciona operadores para extraer información de datos no estructurados utilizando Annotation Query Language (AQL).

Además de los toolkits anteriormente citados, la Comunidad de desarrolladores de InfoSphere Streams contribuye con otros toolkits, por ejemplo, para integración con aplicaciones Geo-espaciales, de procesamiento de imágenes, telecomunicaciones, entre otros.

Con el objetivo de mostrar la estructura básica de un programa en SPL, el Listado 1 muestra el código que despliega el mensaje "Hola, mundo!".

Listado 1. “Hola Mundo” en SPL
composite HolaMundo {                                                //1
  graph                                                              //2
    stream<rstring mensaje> Hola = Beacon() {                        //3
      param iterations : 1u;                                         //4
      output Hola : mensaje = "Hola, mundo!";                        //5
    }                                                                //6
    () as Sink = Custom(Hola) {                                      //7
      logic onTuple Hola : printStringLn(mensaje);                   //8
    }                                                                //9
}                                                                    //10

En las líneas 1 y 2 se define el grafo del programa en SPL, como un operador compuesto ("composite"). Tales operadores pueden usarse a su vez como "sub-grafos" en aplicaciones más grandes.

Las líneas 3 a 6 definen uno de los nodos del grafo. El nodo crea un stream llamado "Hola", es del tipo "Beacon" y genera una tupla (especificada con el parámetro iterations) que contiene únicamente el atributo "mensaje". El valor para el atributo se asigna en la línea 5.

Las líneas 7 a 9 definen el segundo nodo del grafo. Este nodo es una salida ("Sink") que además permite al programador introducir la lógica necesaria para leer el stream "Hola" y procesar sus tuplas (línea 7). En la línea 8 se especifica que se debe imprimir en la salida estándar el mensaje contenido en cada tupla. La Figura 4 muestra gráficamente la estructura del programa "Hola Mundo" en SPL.

Figura 4. Grafo del programa "Hola Mundo"

Tal como demostró este ejemplo, SPL es un lenguaje intuitivo ya que su semántica está específicamente orientada al modelo de grafos para procesamiento de streams de datos.


Conclusiones

Este artículo proporcionó una visión general sobre InfoSphere Streams, así como su papel dentro de las soluciones de "Big Data". InfoSphere Streams complementa a las soluciones basadas en Hadoop y repositorios de datos, al incorporar la capacidad de análisis de datos "al vuelo". Tal capacidad hace invaluable este producto cuando se requiere procesar grandes cantidades de datos (estructurados y no estructurados) para tomas decisiones en tiempo real.

SPL es un lenguaje altamente expresivo y productivo para el desarrollo de aplicaciones para InfoSphere Streams. Si bien el ejemplo mostrado en este artículo es trivial (para fines de una introducción al modelo de programación con SPL), se han resuelto problemas altamente complejos con InfoSphere Streams, por ejemplo:

Todos estos casos demuestran con IBM InfoSphere Streams contribuye a lograr la visión de un Planeta Inteligente, mediante el análisis de altos volúmenes de datos en tiempo real.


Recursos

  1. Doug Laney. "3D Data Management: Controlling Data Volume, Velocity and Variety". 6 de febrero de 2011. http://blogs.gartner.com/doug-laney/files/2012/01/ad949-3D-Data-Management-Controlling-Data-Volume-Velocity-and-Variety.pdf
  2. Hadoop. http://hadoop.apache.org/
  3. Massively Parallel Processing. http://whatis.techtarget.com/definition/MPP-massively-parallel-processing
  4. Stream Processing Languages. http://en.wikipedia.org/wiki/Stream_processing#Stream_Programming_Languages
  5. IBM InfoSphere Streams. http://www-01.ibm.com/software/data/infosphere/streams/
  6. Complex Event Processing. http://en.wikipedia.org/wiki/Complex_event_processing
  7. IBM's Data Hot Potato. http://www.forbes.com/2009/04/09/ibm-stream-computing-technology-enterprise-ibm.html
  8. Data Transfer Object. http://martinfowler.com/eaaCatalog/dataTransferObject.html
  9. IBM InfoSphere Streams V2.0 Information Center. http://publib.boulder.ibm.com/infocenter/streams/v2r0/index.jsp
  10. Algorithmic Trading. http://en.wikipedia.org/wiki/Algorithmic_trading
  11. Annotation Query Language Reference. http://publib.boulder.ibm.com/infocenter/streams/v2r0/topic/com.ibm.swg.im.infosphere.streams.biginsights-aql-reference.doc/doc/biginsights_aqlref_con_aql-overview.html
  12. FIX Protocol. http://fixprotocol.org/
  13. Streams Exchange. https://www.ibm.com/developerworks/mydeveloperworks/groups/service/html/communityview?communityUuid=d4e7dc8d-0efb-44ff-9a82-897202a3021e
  14. What is PMML? http://www.ibm.com/developerworks/industry/library/ind-PMML1/
  15. System and Analytics for Continuously Assessing Transport Systems from Sparse and Noisy Observations: Case Study in Dublin. http://public.dhe.ibm.com/software/data/sw-library/infosphere/casestudy/Assessing-Transport-Systems-casestudy-in-Dublin.pdf
  16. First-of-a-Kind Technology to Help Doctors Care for Premature Babies. http://www-03.ibm.com/press/us/en/pressrelease/24694.wss
  17. Beacon Institute and IBM Team to Pioneer River Observatory Network. http://www-03.ibm.com/press/us/en/pressrelease/22162.wss
  18. Beyond The Three V's of Big Data – Viscosity and Virality. http://blog.softwareinsider.org/2012/02/27/mondays-musings-beyond-the-three-vs-of-big-data-viscosity-and-virality/

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt
ArticleID=831249
ArticleTitle=Introducción a IBM InfoSphere Streams y SPL
publish-date=08212012