Hadoop On Azure (I): Tecnología Hadoop en plataforma Microsoft

Durante las últimas semanas, en el CIIN hemos estado trabajando en una pequeña aplicación para el procesamiento, análisis e indexado del contenido de feeds (RSS y ATOM), mediante tecnologías “Big Data”. Para ello, hemos utilizado las tecnologías disponibles para realizar procesamiento de tipo “Big Data”, en la plataforma Microsoft, utilizando en concreto en nuestro caso Hadoop on Azure. En próximos artículos iremos explicando el trabajo que hemos estado desarrollando y lo aprendido durante el proceso, con ejemplos prácticos, por si puede ser de interés y utilidad para la comunidad.

Para empezar, y situarnos, vamos a introducir que es Hadoop, y también vamos a explicar cual es la propuesta de Microsoft para el desarrollo con Hadoop.

¿Que es Hadoop?

Apache Hadoop es un “framework” que permite y facilita el procesamiento distribuido de grandes conjuntos de datos, a lo largo de un clúster de ordenadores, utilizando un modelo de programación bastante simple.

Esta basado principalmente en los siguientes elementos:

  • Hadoop Distributed File System (HDFS): Es un sistema distribuido de almacenamiento de ficheros, que proporciona un alto rendimiento en el acceso a los datos de la aplicación
  • Hadoop MapReduce: Es un conjunto de librerías, y modelos de programación, para el procesamiento distribuido de grandes conjuntos de datos en un clúster de ordenadores

Además de estos dos componentes básicos de cualquier sistema basado en Hadoop, existe todo un conjunto de proyectos relacionados (Hive, Pig, Mahout, …), que aportan a Hadoop, toda una serie de funcionalidades adicionales partiendo de la base de los dos componentes anteriores.

A continuación se muestra una figura que permite visualizar mejor, los diferentes componentes que forman parte del ecosistema de Hadoop.

HadoopEcosystem

Apache Hadoop es un proyecto de tipo “Open Source”, que al igual que otros proyectos de este tipo, ha sufrido una evolución reflejada en sus diferentes versiones, que puede llegar a confundir a aquellos desarrolladores que empiezan a trabajar con esta tecnología.

La figura que se muestra a continuación, permite visualizar rápidamente la evolución de Apache Hadoop a través de su árbol de versiones.

image

Referencia: http://www.cloudera.com/blog/2012/01/an-update-on-apache-hadoop-1-0/ y las páginas de Changes.txt y Release Notes, de las diferentes versiones.

Distribuciones de Hadoop

Al igual que ocurre con otros proyectos “Open Source”, por un lado tenemos el “core” de esta tecnología que esta representado por el proyecto Apache Hadoop (http://hadoop.apache.org/common/releases.html) y por otra parte existen diferentes distribuciones realizadas por terceros, basadas en este “core” y que aparte de la funcionalidad principal o “core”, añaden funcionalidades propias. El siguiente enlace muestra un listado de algunas de las principales distribuciones disponibles: http://wiki.apache.org/hadoop/Distributions%20and%20Commercial%20Support?action=show&redirect=Distribution

Entre las distribuciones de Hadoop más conocidas se encuentran por ejemplo las de Cloudera, HortonWorks o la ofrecida por Amazon sobre su infraestructura EC2” denominada como Amazon Elastic MapReduce.

Además de las anteriores, Microsoft  anunció y presentó a finales de 2011, su propia distribución de Hadoop sobre plataforma Microsoft, a la que denomino Microsoft Distribution of Hadoop (MDH) que puso a disposición de la comunidad en la forma de una “Customer Technology Preview” (CTP).

Entre las novedades más interesantes que incluye esta distribución (MDH) están:

  • Consola interactiva Javascript basada en Web que permite:
    • Realizar operaciones HDFS incluyendo subir y leer ficheros desde/hasta el HDFS
    • Ejecutar programas MapReduce desde scripts Javascript o ficheros JAR monitorizando su progreso
    • Ejecutar un trabajo Pig, utilizando una sintaxis especial en Javascript y monitorizar su progreso
    • Visualizar datos con gráficas construidas utilizando HTML5
  • Un driver Hive ODBC de acceso a Hadoop, que permite utilizar herramientas familiares como Excel, PowerPivot, SQL Server Analysis Services y Reporting Services para analizar los datos procedentes de Hadoop.
  • Soporte nativo para Windows Azure Blob Storage

Los servicios de Hadoop sobre Windows, tal como se ha comentado anteriormente están disponibles como una CTP, a las que se accede de forma limitada y bajo invitación, donde los interesados en participar deben de rellenar una encuesta comentando su interés acerca de esta tecnología y en que tipo de proyectos están interesados en utilizarla.

Enlaces de interés: http://social.technet.microsoft.com/wiki/contents/articles/6204.hadoop-based-services-for-windows-en-us.aspx

Según la documentación, esta distribución la podemos encontrar en diferentes sabores como:

  • Hadoop-Based Server for Microsoft Windows: Para montar un clúster Hadoop utilizando servidores Windows en las propias instalaciones de la empresa (on-premises)
  • Elastic Map Reduce on Windows Azure: Donde el clúster de Hadoop se instala sobre Azure y se puede interaccionar con él a través de un portal.

Enlaces de interés: http://social.technet.microsoft.com/wiki/contents/articles/6225.windows-azure-deployment-of-hadoop-based-services-on-the-elastic-map-reduce-emr-portal.aspx

Hadoop On Azure

Debido a que el proyecto sobre el que hemos estado trabajado ha estado basado en la versión de Hadoop en Azure, en los siguientes párrafos trataremos de explicar este servicio.

La versión de Hadoop ofrecida actualmente a través del enlace http://www.hadooponazure.com, ofrece a través de un portal un servicio elástico de aprovisionamiento de trabajos Map Reduce, denominado Elastic Map Reduce (EMR). A través del portal, permite aprovisionar un clúster Apache Hadoop sobre Azure. El clúster creado a través de este portal es temporal y tiene una fecha de expiración, permitiendo mientras esta activo ejecutar sobre él, trabajos de tipo MapReduce, procesando datos que estén tanto en el clúster como en otros lugares.

En el caso de Hadoop on Azure al tratarse de un servicio en fase Community Technology Preview (CTP), se trata de un producto en constante evolución. Por ejemplo en nuestro caso, al aprovisionar el clúster en Azure, hemos estado trabajando tanto con la versión de Hadoop 0.20.203.1 (hasta el día 22 de Agosto), como con la versión de Hadoop 1.0.1. que es la que esta disponible en la actualidad.

En la siguiente figura se puede ver la correspondencia entre la versión de Hadoop aprovisionada por el portal de EMR en Azure, y la versión de Apache Hadoop en la que esta basada.

image

En el siguiente enlace se comenta el cambio de versión en la versión aprovisionada por el portal EMR de Azure y los elementos que incluye: http://blogs.msdn.com/b/hpctrekker/archive/2012/08/22/hadoop-on-windowsazure-updated.aspx

Desde el punto de vista práctico, este cambio no ha supuesto grandes problemas desde el punto de vista de programación por parte del desarrollador, ya que tanto la versión 0.20.203.1 como la versión 1.0.1, del core de Hadoop, están basados en el mismo modelo de programación, y apenas han sufrido grandes cambios.

La tabla siguiente muestra una comparativa entre el contenido de las dos últimas versiones que ha utilizado el portal de EMR de Azure, para aprovisionar el clúster de Hadoop sobre Azure.

  Hasta el 22 de agosto de 2012 A partir del 22 de agosto de 2012
Componente Versión (SU2) Versión (SU3)
Hadoop Core 0.20.203.1 1.0.1
Hive 0.7.1 0.8.1
Pig 0.8.1 0.9.3
Mahout 0.5 0.5
Pegasus 2 2
SQOOP 1.3.1 1.4.2

Para próximas versiones de HaoopOnAzure, esto puede ser diferente, ya que tal como se comenta en el documento de preguntas frecuentes FAQ, esta planeado que se base en la versión de Apache Hadoop derivada del tronco principal (0.23 o 2.0), que incorporan e introducen cambios significativos en el modelo de programación, a través de una nueva versión de MapReduce (MR.vNext / YARN).

Q: Can I use C# or .NET with Hadoop on Azure?

A: You can use C# and .NET with Hadoop on Azure by using the Streaming OM. Please note, that while you can do this, it is not really designed for high performance production workloads. Once the 0.23 branch (MR.vNext / YARN) is production ready (Hadoop on Azure is snapshot to 0.203+), we are planning to do .NET integration with this branch of Apache Hadoop. In this new branch, the Apache Hadoop codebase has switched from Avro to Protobuf (Protocol Buffer) which allows for much faster data interchange performance.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *