Big Data, Hadoop y Windows Azure (I)

Si analizáramos el tipo y la cantidad de información que se puede llegar a generar a diario veríamos que cada día se generar muchísima información, mucha más de la que se generaba hace unos años, y que cada vez ésta es de diferente tipo. Por ejemplo, basta con hablar de toda la información que se genera a diario en las redes sociales como Twitter y Facebook para darse cuenta del volumen diario que puede generarse cada día. Pero no sólo pensad en redes sociales, pensad en cualquier otra empresa, como podría ser una empresa eléctrica o de energía, la cantidad de información diaria que podría coger de todos los dispositivos de medición y monitorización de los que disponen. A toda esta información es a lo que se conoce como Big Data.

En los sistemas tradicionales sólo parte de esta información se trata y muchas veces hay muchísima de esta información que se deja de procesar,  ya que por ejemplo, su almacenamiento sería carísimo, difícil de procesar e incluso en muchos casos difícil de entender el cómo se debe analizar y tratar. En estos sistemas tradicionales raramente la información pasa de varios terabytes, cuando en Big Data estamos hablando de volúmenes de información de petabytes y hexabytes.

01-TraditionalProcessing

Básicamente la información tiene tres que factores que lo hacen complicado de manejar; El volumen de información que se hoy en día en altísimo y cada día se genera mucha más. El tipo de información es muy diverso, teniendo que manejar en muchos cosos información estructura y desestructurada. Por último, la velocidad, cada vez esta información aparece más rápidamente.

03-RDBMSMapReduce

Es para este tipo de escenarios, para el tratamiento de esta información que se conoce como Big Data, dónde encaja Apache Hadoop.

Hadoop es un framework open source para el procesado, almacenamiento y análisis de cantidades enormes de información, información de diversos orígenes (estructurados, desestructurados…). Inicialmente fue Yahoo! el creador de Hadoop basándose en MapReduce, un sistema desarrollado por Google sobre el año 2000 creado para indexación de la Web. Fue diseñado para ser capaz de analizar petabytes y hexabytes de información de forma distribuida con la capacidad de procesado paralelo de toda la información almacenada.

¿Quién lo usa? Amazon, Facebook, Google, IBM, Intel Research, Yahoo!…

Microsoft ha contribuido a este proyecto con dos distribuciones de Hadoop para Windows, claro está también open source, que pueden funcionar sobre un entorno Windows on-premise o sobre Windows Azure.

El sistema que hay por debajo a grandes rasgos puede “resultar sencillo”, pero muy efectivo.

Hadoop es capaz de recibir información de diversos orígenes, tanto estructurada como desestructurada, para almacenarla en sus propio sistema de almacenamiento, conocido como Hadoop Distributed File System (HDFS). Cuando recibe la información la divide en múltiples partes (chunks) y lo almacena en los diferentes nodos que forman parte del cluster de Hadoop. La información se replica entre diferentes nodos para que si un nodo falla la información no se pierda.

Una cosa muy interesante del sistema es que está diseñado para poder funcionar en cualquier tipo de hardware, lo que provoca que realmente cualquier tipo de máquina podría formar parte del cluster de Hadoop, lo que hace que la solución pueda ser más económica.

El análisis de la información se realiza con una técnica conocida como MapReduce.

Una vez almacenada la información los usuarios puede crear un “Map” job para que Hadoop realice las acciones que quiere el usuario. Éstas acciones no son más que un programada desarrollado por el usuario en Java (veremos otras opciones). Hadoop es capaz de localizar la información en los diferentes nodos, procesarla de forma paralela en cada nodo para realizar la acción solicitada por el usuario.

Una vez el procesado se encuentra finalizado en cuando se inicia la tarea de “Reduce” que recoge los diversos resultados generados en cada nodo y los unifica para poder ofrecérselos al usuario.

02-MapReduce

Una cosa interesante es que alrededor de Hadoop existen múltiples proyectos open source que aumentan enormemente las capacidades de este sistema y que lo hacen aún más interesante.

Hive, es una infraestructura de data warehouse sobre Hadoop diseñada inicialmente para ser capaces de entender toda la información de Facebook. Ofrece una interface SQL (HiveQL) para ser capaz de manejar la información almacenada por Hadoop. Microsoft ha desarrollado un add-in de Hive para analizar y visualizar los datos de Hadoop desde Excel o PowerPivot.

Pig, es otro lenguaje desarrollador por Yahoo! para la consulta y análisis de la información.

Sqoop es un framework open source que permite conectar cualquier RDBMS con HDFS.

Como he comentado anteriormente, Microsoft también está contribuyendo a este proyecto con sus propios aportes, en este caso con dos nuevas distribuciones, una para entornos Windows Server y otro para Windows Azure. Claro está, todas las contribuciones realizadas por Microsoft vuelven a la comunidad como proyectos open source.

En los próximos post espero poder profundizar en la oferta de Microsoft para Hadoop, que aportes ha realizado, que nueva funcionalidad incluye y por supuesto, cómo funciona.

Node.js, Cloud9 y Windows Azure

Siguiendo con la línea de los últimos post sobre cómo desplegar una aplicación PHP, un WordPress, o una aplicación Node.js, en esta ocasión hablaré sobre otra posibilidad de trabajar con Node.js y Windows Azure.

Cloud9 es una IDE accesible a través del navegador que nos permite desarrollar aplicaciones Node.js y entre otras cosas interesantes, permite desplegar las aplicaciones directamente en Windows Azure. Este IDE es gratuito para proyectos open source.

Podéis ver este IDE en http://c9.io/ 

 

01-AzureCloud9

Podemos crear un nuevo proyecto.

02-AzureCloud9

Indicamos dónde queremos albergar nuestro código fuente:

03-AzureCloud9

Y una vez creado, ya podemos crear nuestra aplicación. En este caso sólo he creado una única página server.js que mostrará un “Hola Mundo”.

El IDE permite también depuración.

04-AzureCloud9

Una vez hayamos creado la aplicación, desde el menu “Deploy” podemos indicar la opciones de configuración del despliegue. En este caso, yo he indicado que quiero desplegarlo en Windows Azure.

El paso 1 me permite descargarme la configuración de mi subscripción Azure. Abrirá el navegador y me descargará un fichero de settings que posteriormente podré subir al IDE. Claro está, me pedirá las credenciales de acceso (LiveID) a la subscripción donde se quiere hacer el despliegue.

05-AzureCloud9

Una vez tengo la configuración, puedo ver los servicios de la subscripción, crear nuevos etc…

06-AzureCloud9

Y tras elegir el servicio dónde quiero desplegar, ya tendré todo lo necesario para desplegar. Fácil, verdad?

07-AzureCloud9

08-AzureCloud9

09-AzureCloud9

Node.js en Windows Azure

Siguiendo con la línea de los últimos post sobre cómo desplegar una aplicación PHP y un WordPress, en esta ocasión hablaré sobre cómo dar los primeros pasos con Node.js.

Después de instalar el SDK de Windows Azure, para poder trabajar con aplicaciones Node.js es necesario tener instalado el SDK de Node.js, el cuál está disponible como proyecto open source en GitHub https://github.com/WindowsAzure/azure-sdk-for-node 

Lo más cómodo sin duda es descargárselo a través de Microsoft Web Platform Installer.

Una vez que lo tenemos instalado, éste nos ofrece una serie de comandos PowerShell que simplifican el trabajo con Node.js y Windows Azure.

Como veréis a continuación, el trabajo es muy similar al que ya veíamos en el post de PHP, ya que el SDK está orientado a ser capaces de generar la estructura de ficheros y directorios dónde incrustar nuestra aplicación, para posteriormente poder empaquetarla en el formato que necesita la plataforma Windows Azure.

El primer paso es abrir la aplicación “Windows Azure PowerShell for Node.js” desde el menú inicio, programas. Una vez abierto, tendremos que conocer una serie de comandos:

Creamos un directorio sobre el cuál crear nuestra estructura de ficheros con mkdir c:tempNode

Una vez que lo tenemos creamos la estructura de ficheros y directorios necesario para poder incluir dentro la aplicación Node.js. Esta estructura de directorios está ya preparada para que luego sea posible empaquetarla en el formato que necesita la aplicación. Así mismo incluye los ficheros de configuración que permite configurar cómo se despliega la aplicación; número de máquinas, endpoints, conexión RDP etc…

Para crear esta estructura se usa el comando New-AzureService tasklist .

Una vez creada la estructura, le podemos decir que queremos añadir un WebRole, una aplicación web que queremos desplegar;  Add-AzureNodeWebRole WebRole1

Esta operación creará un directorio WebRole1 que contiene un “Hola Mundo” en Node.js. Es en este directorio dónde podríamos añadir nuestra aplicación, la que queremos desplegar en Windows Azure.

  1. cd WebRole1
  2. ls
  3. notepad server.js

Una vez que tenemos nuestra aplicación preparada, podemos probarla en el entorno de simulación locla que nos proporciona el SDK de Windows Azure.

Para lanzar el entorno de simulación tenemos el siguiente comando; Start-AzureEmulator –launch

En este caso, los comandos PowerShell para Node.js también nos ofrece la posibilidad de desplegar directamente la aplicación, siempre y cuándo tengamos configurados los certificados que permiten la administración remota a través del API REST, tal y como sucen cuando queremos desplegar desde Visual Studio.

El primer paso es obtener la configuración de la cuenta sobre la que queremos desplegar la aplicación e importar esta configuración.

El comando Get-AzurePublishSettings abrirá el navegador, y tras autenticarnos con el LiveID de la subscripción Azure, nos permitirá descargar la configuración de la subscripción, la cuál podremos importarla con el comando Import-AzurePublishSettings.

Una vez importada la configuración podemos desplegar directamente la aplicación. Esta operación crea el servicio en el datacenter indicado y despliega la aplicación.

Publish-AzureService –name NombreServicio –location "North Central US” –launch

01-AzureNode

Una vez se despliegue la aplicación ya podemos acceder a ella a través de la URL que nos proporciona el servicio que hemos creado.

 

02-AzureNode

Desde powershell también podemos hacer otras operaciones, como parar, arrancar o eliminar el servicio desplegado;  Stop-AzureService y Remove-AzureService.

Os recomiendo por último este post de David Salgado dónde pone un ejemplo de Node.js, Express y Windows Azure.