Una despedida y un “hasta pronto”

Aunque ya lo ha comentado Juan Carlos en su último post, desde el pasado 30 de junio yo también he dejado de formar parte de un proyecto tan ilusionante y motivador como el de los Centros de Innovación de Microsoft, a través del CIIN de Cantabria.

Han sido siete años en los que he tenido la fortuna de estar siempre en contacto con las últimas novedades tecnológicas, conocer a un sinfín de buenos profesionales y de empresas apasionadas por su trabajo, y de colaborar en un montón de proyectos cada uno de ellos más interesante y motivador, oportunidades únicas que me ha dado mi pertenencia al CIIN.

Desde allá por 2006, en las que como comentaba Juan Carlos en su post, los “chicos” de “Plain Concepts”, nos cargaron las pilas con todas las novedades que estaban surgiendo en esos momentos con la plataforma .NET, a lo largo de estos años por el centro han pasado una buena cantidad de excelentes profesionales tanto de dentro como fuera de Cantabria, que han compartido con nosotros sus experiencias y conocimientos, y a los que me gustaría agradecerles todo lo que nos han enseñado.

También quisiera agradecer la confianza puesta en nosotros por muchas empresas, compartiendo las dudas, preguntas y preocupaciones que les planteaba la adopción de las nuevas tecnologías que han ido surgiendo durante estos años, a un ritmo tan acelerado como el actual. A este respecto, me gustaría también destacar la labor, trabajo en conjunto y colaboraciones llevadas a cabo con nuestros excelentes compañeros del resto de los centros de innovación tanto pasados, como actuales, así como el apoyo y colaboración recibida durante todos estos años con todas las personas con las que he tenido contacto en Microsoft Ibérica, con el fin de ayudar a las empresas con las que hemos colaborado y fomentar la creación y fortalecimiento de las nuevas.

Por último, me gustaría sobre todo agradecer el haber tenido la oportunidad de recorrer todo este camino con compañeros como Juan Carlos y Pablo, y de contar siempre con el apoyo y ánimo de los sucesivos directores del centro como Luis, Miguel y Roberto. No me gustaría olvidarme tampoco de todos los becarios y proyectantes que han pasado a lo largo de los años por el centro realizando sus proyectos y aprendiendo con nosotros.

En fin, que espero que esto sea solo un “hasta pronto”.

¡Un saludo a todos!

Ángel

Webcast MSDN Innovación e inspiración para tu empresa

¡Apúntate! Open MICs de Microsoft – Innovación y participación para tu empresa.

En los próximos días va a tener lugar una serie de interesantes “Webcast MSDN”, especialmente dirigidos a emprendedores, aunque abierto para cualquier interesado. En estos webcasts se tratarán aspectos tales como el por qué el mercado actual nos exige  innovar en nuestros modelos de negocio, o acerca de la necesidad de emprender e innovar en las empresas del futuro. También se tratarán los nuevos escenarios de innovación que van de la innovación abierta a la innovación crowd, o la revolución de los consumidores, que ha supuesto el que la tecnología sea accesible al gran público.

Acércate al CIIN o síguelos online a través de estos enlaces.

Para cualquier duda o cuestión ponte en contacto con nosotros.

OPEN MICs Innovación e inspiración para tu empresa

imageimage 

 

Próximamente:

 

clip_image001clip_image001[4]
image

¡Cambios en las ofertas de Azure para miembros de BizSpark y MSDN – Mayor flexibilidad!

Entre las muchas novedades que se han anunciado durante el “TechEd NA 2013” el pasado 3 de junio, una de las que va a afectar tanto a miembros de BizSpark, como a poseedores de subscripciones MSDN, es el cambio de criterio a la hora de proprocionar los beneficios de este tipo de subscripciones en Azure.

Hasta ahora, la política que se seguía para proporcionar los beneficios en Azure a aquellos que disponían de una susbcripción MSDN, era la de disponer de una serie de cupones de uso mensuales en los principales servicios de Azure (1500 horas de instancia pequeña, 5 unidades de base de datos, 90 GB de almacenamiento, ….).

Con el anuncio realizado en el TechEd NA, y explicado en mayor detalle por Scott Guthrie en su blog, se pasa a una política de créditos mensuales, donde los subscriptores de MSDN y miembros de BizSpark, dispondrán de un determinado crédito mensual (en función de su tipo de suscripción), y donde son ellos los que deciden en función de sus necesidades, como desean utilizar estos créditos entre cualquiera de los diferentes recursos y servicios proporcionados por la plataforma de Windows Azure (Máquinas Virtuales, Servicios en la Nube, Almacenamiento, Base de datos SQL, etc …), proporcionando con ello una mayor libertad y flexibilidad de cara a disfrutar de estos beneficios.

Estos créditos y su distribución entre los diferentes recursos serán puestos a cero cada mes, con lo que mensualmente los poseedores de estas subscripciones podrán cambiar la forma en que los distribuyen en función de sus deseos. Si se necesitan utilizar recursos adicionales a los proporcionados por el crédito mensual, parte de estos recursos se podrán consumir utilizando los créditos mensuales, y el resto se podrán pagar beneficiandose de las tasas de descuento disponibles para usuarios de MSDN.

 

Para explicar mejor lo anterior, partiremos del ejemplo que muestra Scott Guthrie en su blog. Tomando por ejemplo un crédito de $100 al mes,  este crédito se podría consumir de cualquiera de las siguientes formas:

 

1) Como 3 Máquinas virtuales a 16 horas al día

image

2) Como 80 máquinas virtuales de Windows Server (con SQL, BizTalk, SharePoint, etc) para realizar pruebas de carga durante 20 horas

image

3) Para levantar un cluster de 50 nodos Hadoop durante 10 horas para una ejecución de un proceso MapReduce:

image

4) O para levantar hasta 100 sitios web con SQL Database:

image

 

Enlaces interesantes y con más información a este respecto son:

http://weblogs.asp.net/scottgu/archive/2013/06/03/windows-azure-announcing-major-improvements-for-dev-test-in-the-cloud.aspx

http://www.windowsazure.com/es-es/pricing/member-offers/msdn-benefits/

 

Por otra parte, otras novedades muy interesantes del TechEd NA sobre Azure, y que merecerían un artículo aparte son:

  • Se deja de cobrar por las máquinas virtuales paradas, cosa que no ocurría hasta ahora, donde si parabas una máquina pero se te olvidaba eliminarla, seguías pagando por tenerla desplegada.
  • Se pasa a una métrica de pago por minuto en vez de pago por hora como se había hecho hasta ahora, con lo que si tenemos una máquina arriba unos pocos minutos, ya no nos cobraran como si hubiera estado toda una hora.
  • Utilización de los derecho de uso de MSDN en Windows Azure, para poder utilizar de manera legal, las licencias proporcionadas por la subscripción MSDN, en un entorno en la nube.
  • Fuertes descuentos para clientes con subscripciones MSDN.

Recientes características de Windows Azure (Virtual Machines y Active Directory) alcanzan la mayoría de edad (y II)

Como comentaba esta mañana, hoy se ha anunciado la disponibilidad para el público en general (GA) de la Infraestructura como Servicio (IaaS) de Windows Azure, incluyendo la funcionalidad de “Virtual Machine” y “Virtual Network”.

Podéis encontrar más información en los siguientes posts:

Además de anunciar el pase a “General Availability” de estas funcionalidades, podeis encontrar en estos artículos más información acerca de nuevas mejoras que se han realizado sobre estos servicios como:

  • Nuevas plantillas de imagenes de máquinas virtuales que incluyen imágenes con SQL Server, BizTalk Server y SharePoint, que nos permitirán poner en marcha más rápidamente máquinas con estos servicios.

image

 

  • Nuevos tamaños de máquinas virtuales que se añaden a las ya existentes, para crear instancias de memoria intensiva, como la A6 (4 núcleos y 28 GB de memoria) y A7 (8 núcleos y 56 GB de memoria)

image

 

  • Reducciones en los precios de las máquinas virtuales tanto para la oferta IaaS como la PaaS.
Nombre de instancia de computación Núcleos virtuales RAM Precio por hora
(a partir del 1 de junio)
Precio por hora (hasta el 31 de mayo)
Extra pequeña (A0) Uso compartido 768 MB

€ 0,0149
(~€ 11,18/mes)

€ 0,01
(~€ 7,447/mes)

Pequeña (A1) 1 1,75 GB

€ 0,0671
(~€ 49,90/mes)

€ 0,0596
(~€ 44,69/mes)

Mediana (A2) 2 3,5 GB

€ 0,1341
(~€ 99,79/mes)

€ 0,1192
(~€ 88,62/mes)

Grande (A3) 4 7 GB

€ 0,2681
(~€ 199,58/mes)

€ 0,2384
(~€ 177,24/mes)

Extra grande (A4) 8 14 GB

€ 0,5362
(~€ 399,16/mes)

€ 0,4767
(~€ 354,48/mes)

A6 4 28 GB

€ 0,7596
(~€ 565,23/mes)

€ 0,7596
(~€ 565,23/mes)

A7 8 56 GB

€ 1,5192
(~€ 1.130,46/mes)

€ 1,5192
(~€ 1.130,46/mes)

  • Y otras pequeñas mejoras como incrementar el tamaño por defecto del disco de SO de los 30GB de la preview a 127 GB, permitir personalizar el nombre de usuario de la cuenta de administrador a la hora de crear las máquinas, o habilitar por defecto el PowerShell remoto en todas las imagenes de sistema operativo Windows Server.

Recientes características de Windows Azure (Virtual Machines y Active Directory) alcanzan la mayoría de edad

Este mes de abril, varias características intoducidas en el último año en Windows Azure alcanzan la mayoría de edad, pasando de estar en el estado “Preview” a estar disponibles como “General Availability (GA)” y por lo tanto pudiendose utilizar en entornos de producción, con las opciones de soporte y acuerdos de nivel de servicio (SLA) propias de este estado.

En concreto, hoy día 16 de abril, tal como se puede ver en la páginas web donde se detallan los precios de los servicios de Windows Azure, han pasado al estado de “General Availability”, algunas de las características de infraestructura de Azure introducidas el año pasado como las Windows Azure Virtual Machines, que comienzan a estar disponibles de forma general (GA) a partir de hoy, aunque se seguirá ofreciendo el precio de descuento de la “preview” hasta el 31 de mayo, comenzando el precio de GA a partir del 1 de junio.

Otro de los productos que también recientemente ha alcanzado la mayoría de edad ha sido Windows Azure Active Directory, la implementación en la nube del servicio de directorio activo, que el pasado 8 de abril, también paso al estado de “General Availiability”.

Con estos últimos anuncios pasamos a disponer un conjunto cada vez más amplio de características y herramientas de Windows Azure, que podemos utilizar en nuestros entornos de producción.

Olimpiadas 2013 de Formación Profesional Spain Skills 2013

Logo Olimpiadas FP 2013

Hoy comienza en Madrid en el IFEMA, la fase de competición de las Olimpiadas 2013 de Formación Profesional – Spain Skills 2013. La competición propiamente dicha se extiende desde hoy hasta el próximo sábado, para acabar el domingo con la entrega de medallas y la clausura del campeonato. Desde el Centro de Innovación en Integración patrocinamos esta edición de las Olimpiadas en la que compiten alumnos de formación profesional en representación de su comunidad autónoma.

Existen varias categorías o “skills” en competición, en representación de las diferentes ramas profesionales de formación profesional, donde por ejemplo en la rama de Informática y Comunicaciones, las skills que se evalúan son las de Soluciones de software para empresas, Diseño web, T.I. administración de sistemas en red y software libre.

Uno de los aspectos en los que ha participado el Centro de Innovación ha consistido en la elaboración de las pruebas o “Test Project”, de la skill de Soluciones de Software para Empresas. En esta skill, los alumnos en competición deben demostrar sus habilidades y destrezas en el uso de soluciones ofimáticas como procesadores de texto, hojas de cálculo, bases de datos, etc…, presentes en el día a día de las empresas, y donde se les va evaluar con especial atención su dominio de los aspectos más avanzados en el uso de estas herramientas en el entorno empresarial.

La colaboración del centro en las Olimpiadas 2013 de Formación Profesional, esta en línea con nuestros objetivos de dinamización y formación en las tecnologías de la información y las comunicaciones, y en el fomento de la formación de profesionales altamente capacitados, que actualmente demandan las empresas.

Si quieres obtener más información sobre las Olimpiadas 2013 de Formación Profesional – Spain Skills 2013  o seguir su retransmisión en directo aquí dispones de los siguientes enlaces:

 

Imagen Stand - Soluciones de Software para empresas

[Eventos]: TechDay Tour: Desarrollo para Windows

Con las pilas recargadas tras el TechDay/Community Day de la semana pasada, en las próximas semanas se van a llevar a cabo una serie de eventos por varias de nuestras ciudades (Santiago de Compostela, Valladolid, Barcelona, Tenerife, Sevilla, Santander y Valencia), donde el principal objetivo va a ser el de dar a conocer las principales novedades que se han producido referidas al desarrollo para Windows, en especial sobre Windows 8, Windows Phone 8, o las nuevas funcionalidades ofrecidas por la plataforma de Windows Azure.

Si queréis más información sobre el TechDay Tour y las fechas en las que se va a llevar a cabo en cada una de estas ciudades, podéis encontrar más información en: http://msdn.microsoft.com/es-es/eventos_msdn.aspx

En el CIIN, vamos a llevar a cabo este evento presencial el próximo 13 de diciembre, en colaboración con Rafael Serna (SDM Programas) y de Josué Yeray (Plain Concepts), para mostraros aquellos aspectos más relevantes acerca de las novedades que han surgido en estas plataformas en los últimos meses.

Si quieres inscribirte o obtener más información sobre el evento presencial de Santander “TechDay Tour – Santander”, puedes obtener más información en: http://www.ciin.es/web/servicios/eventos/Paginas/20121213_TechDayTour.aspx?Fecha=13-12-2012

La agenda del evento de Santander, va a ser la siguiente:

  • Keynote (Juan Carlos González)
    • En esta sesión os comentaremos todas las novedades que se han producido en los últimos meses y que acaban de llegar, en temas como Windows 8, Windows Phone 8, Azure, Visual Studio, etc…
  • Windows 8 (Rafael Serna)
    • Windows Store Apps, Desktop Apps, WinRT … son algunos de los muchos nuevos conceptos que trae consigo la nueva versión de Windows, un Windows reimaginado. En esta sesión veremos las novedades que incorpora y os adentraremos en el desarrollo de Windows Store Apps de manera práctica (sí, con código).
  • Windows Phone 8 (Josué Yeray)
    • ¿Qué novedades trae Windows Phone 8? ¿Es una aplicación WP 7.5 compatible con WP 8? ¿Y su código? ¿Al revés también es cierto?¿Puedo compartir código entre Windows 8 y Windows Phone 8? En esta sesión resolveremos estas y otras dudas con ejemplos de código.
  • Windows Azure (Ángel Acha)
    • Almacenar el estado de la sesión, gestionar las notificaciones, hacer que los usuarios utilicen proveedores de identidad existentes…. son características que marcan una diferencia de calidad entre aplicaciones. Durante la sesión, veremos cómo podremos incorporar estas funcionalidades a una aplicación de forma sencilla utilizando Windows Azure Mobile Services.
  • Mejor todos juntos (Rafael Serna, Josué Yeray y Ángel Acha)
    • Ejemplo práctico de un desarrollo conjunto para Windows 8 y Windows Phone 8, apoyándose en código compartido y servicios en la nube.
  • Mesa redonda (Ask the Experts) (Rarale Serna, Josué Yeray, Ángel Acha y Juan Carlos González)
    • En esta sesión de preguntas y respuestas (Q&A), nos sentaremos todos juntos y responderemos tus preguntas sobre Windows 8, Windows Phone y Azure. ¡No te quedes con dudas!

 

Si no lo habéis hecho ya, os animo a todos a inscribiros y acudir al evento TechDay Tour, que tengáis más cercano.

¡Nos vemos en el TechDay Tour de Santander!

Hadoop On Azure (II): Funciones MapReduce y procesamiento de datos de entrada

Debido a las características del proyecto en el que hemos estado trabajando, una de las primeras tareas que se nos planteo fue el procesamiento de datos que nos venían en formato XML dentro de Hadoop. Aunque Hadoop permite consumir datos en formatos de entrada muy diferentes, desde ficheros de texto plano, binarios, XML, bases de datos, etc…, la mayoría de los ejemplos y situaciones están orientados a utilizar ficheros de texto plano, donde cada línea representa un registro de entrada.

Por ello, la utilización de XML como formato de los datos de entrada, implicó en un principio un pequeño desafío a la hora de encontrar la mejor alternativa para tratar este tipo de datos.

Antes de entrar en detalle a comentar las posibles alternativas disponibles para procesar en Hadoop ficheros con formato XML (lo haremos en el siguiente post), quisiera introducir por encima en este, el funcionamiento básico de Hadoop y como realiza el procesamiento de los datos de entrada.

Funciones MapReduce

Lo primero comentar que la base sobre la que trabaja Hadoop son los programas o funciones MapReduce que permiten procesar grandes volúmenes de datos en paralelo.

Los datos de entrada a las funciones MapReduce, se proporcionan en la forma de parejas clave-valor (key, value), que serán procesadas por las funciones de Mapeo y Reducción, para generar y obtener nuevos conjuntos de parejas clave-valor de salida. Es decir, los programas MapReduce transforman listas de elementos de datos de entrada (en la forma de parejas clave-valor), para obtener listas de elementos de datos de salida (también como parejas clave-valor), realizándolo en dos etapas sucesivas, la de mapeo y la de reducción.

En la primera etapa, de mapeo, se proporciona la lista de elementos de datos (parejas clave-valor), uno a uno, a la función denominada “Mapper”, que transforma cada elemento individual en uno, ninguno o varios elemento de datos de salida.

Función de mapeo:

map: (k1, v1) –> lista(k2,v2)

Visualmente cuando hace un mapeo uno a uno, podría verse como:

image

 

En la segunda etapa, de reducción que permite agregar los elementos de datos, se proporciona a la función denominada “Reducer”, un elemento que le permite iterar sobre los valores de entrada procedentes de una lista de entrada asociados con un valor de clave determinada, es decir, se proporciona al reductor todos los valores (lista(v2)) asociados con una determinada clave (k2), para que opere sobre estos valores y obtenga uno o unos pocos valores de salida diferentes.

Función de reducción:

reduce: (k2, lista(v2)) –> lista(k3,v3)

Visualmente para el caso de obtener un único valor a partir de la lista de entrada, podría verse como::

image

Para profundizar más en los conceptos básicos de MapReduce, las siguientes referencias y enlaces proporcionan una idea bastante completa.

Referencia: Tom White, “Hadoop: The Definitive Guide, 2nd Edition”, O’Relly Media / Yahoo Press, 2010 (http://hadoopbook.com)

Referencia: Yahoo Hadoop Tutorial (http://developer.yahoo.com/hadoop/tutorial/module4.html)

Procesamiento de datos de entrada en Hadoop

Una aspecto muy importante de todo este proceso es como realiza Hadoop el procesamiento de los datos de entrada para obtener el conjunto de parejas claves-valor que serán procesadas por los programas MapReduce.

Básicamente, el procesamiento de los datos que se lleva a cabo en un nodo en Hadoop, sigue el siguiente flujo:

 

image

Como veremos más adelante, Hadoop es capaz de procesar datos procedentes de fuentes de datos diversas y con diferentes formatos de entrada, desde ficheros de texto plano, ficheros binarios, ficheros XML, hasta bases de datos y otros orígenes de datos.

Para llevar a cabo este procesamiento, reflejado de forma esquemática en la ilustración anterior, Hadoop utiliza una serie de clases, entres las que se encuentran las clases InputFormat, InputSplit y RecordReader, que son las más interesantes desde el punto de vista del desarrollador.

Actualmente para especificar trabajos de tipo MapReduce, en Hadoop estan conviviendo dos APIs la vieja  representada por el espacio de nombres org.apache.hadoop.mapred y la nueva  representada por org.apache.hadoop.mapreduce. A la hora de definir las clases bases de la API, en la vieja se utilizaban sobre todo interfaces, mientras que en la nueva se utilizan principalmente clases abstractas.

Hoy en día es posible describir un trabajo MapReduce, bien utilizando una API o la otra, pero en la especificación y configuración de un mismo trabajo MapReduce no se deben de mezclar clases de una y otra API.

A continuación pasaremos a describir cada una de las principales clases en Hadoop, responsables de procesar los datos de entrada.

InputFormat

En primer lugar es necesario definir que se va a utilizar como fuente de datos de entrada y como se van a obtener esos datos. Para ello Hadoop utiliza la clase InputFormat (que en la versión antigua de la API es una interfaz y en la versión nueva es una clase abstracta), a través de una clase que derive de ella (bien implementando la interfaz o extendiendo la clase, según el caso). Esta clase además especificará mediante una clase que derive de la clase InputSplit como se van a trocear los datos procedentes de la fuente de datos para asignárselos a un “mapeador”, así como la clase que derive de la RecordReader que se utilizara para ir leyendo y suministrando a la función de mapeo las sucesivas parejas clave-valor.

Hadoop proporciona varias clases que permiten utilizar como fuente de datos: el sistema de ficheros (FileInputFormat, TextInputFormat, KeyValueTextInputFormat, SequenceFileInputFormat, …), una base de datos (DBInputFormat), etc…, pero también admite crear clases personalizadas para por ejemplo tratar datos procedentes de la Wikipedia(WikipediaPageInputFormat) o de otras fuentes de datos (p.e. que lean de un puerto).

La clase que utiliza por defecto salvo que se le indique otra, es TextInputFormat, que trata cada línea de cada fichero de entrada como un registro separado, donde la clave es el offset en bytes desde el principio del fichero que tiene cada comienzo de línea y el valor es el contenido de cada línea.

Para crear una clase de tipo InputFormat, habrá que tener en cuenta que la clase contemple las siguientes funcionalidades:

  • Seleccionar los ficheros u otros objetos que serán usados como entrada
  • Definir los InputSplits que dividen un fichero o fuente de datos de entrada, en trozos para asignarlos a las diferentes tareas de mapeo
  • Proporcionar una factoría de objetos RecordReader que lean del fichero o fuente de datos de entrada y proporcionen las diferentes parejas clave-valor.

Además esta clase deberá de:

O bien implementar la interfaz definida por la vieja API MapReduce, o heredar de una clase que la implemente. La interfaz definida por la vieja API para la clase InputFormat  (org.apache.hadoop.mapred.InputFormat) es:

public interface InputFormat <K,V> {

  /** Logically split the set of input files for the job **/
  InputSplit [ ] getSplits (JobConf job, int numSplits) throws IOException;     

  /** Get the RecordReader for the given InputSplit **/
  RecordReader <K,V> getRecordReader (InputSplit split, JobConf job, Reporter reporter) 
       throws IOException; 

}

O bien extender la clase abstracta definida por la nueva API MapReduce o heredar de una clase que la extienda. La clase abstracta definida por la nueva API para la clase InputFormat (org.apache.hadoop.mapreduce.InputFormat) es:

public abstract class InputFormat<K, V> {

  /** Logically split the set of input files for the job **/
  public abstract 
    List<InputSplit> getSplits(JobContext context
                               ) throws IOException, InterruptedException;

  /** Create a record reader for a given split **/
  public abstract 
    RecordReader<K,V> createRecordReader(InputSplit split,
                                         TaskAttemptContext context
                                        ) throws IOException, 
                                                 InterruptedException;

}

InputSplit

El siguiente paso consiste en especificar como se van a trocear los datos procedentes de la fuente de datos de entrada para asignárselos a cada tarea de mapeo individual. Para ello Hadoop utiliza una clase de tipo InputSplit, que especifica los datos o la unidad de trabajo que se asignará a cada tarea de mapeo o “mapper” individual, para que se encargue de procesarla.

Es decir, un InputSplit es un trozo de los datos de entrada o “split”, que es procesado por un único “mapper”. Cada “mapper” procesa un único “split”. Cada “split” es dividido en registros, y el mapper procesa cada registro (pareja clave-valor") de uno en uno. Los “split” y registros son conceptos lógicos, no hay nada que obligue a que estén vinculados a ficheros.

En el caso de que sea necesario crear una clase InputSplit personalizada, esta clase deberá de:

O bien implementar la interfaz definida por la vieja API MapReduce, o heredar de una clase que la implemente. La interfaz definida por la vieja API para la clase InputSplit  (org.apache.hadoop.mapred.InputSplit) es:

public interface InputSplit extends Writable {

  /** Get the total number of bytes in the data of the InputSplit **/
  long getLength() throws IOException; 

  /** Get the list of hostnames where the input split is located**/
  String [ ] getLocations() throws IOExcecption;  

}

O bien extender la clase abstracta definida por la nueva API MapReduce o heredar de una clase que la extienda. La clase abstracta definida por la nueva API para la clase InputSplit (org.apache.hadoop.mapreduce.InputSplit) es:

public abstract class InputSplit {

  /** Get the size of the split **/
  public abstract long getLength() throws IOException, InterruptedException;

  /** Get the list of nodes by name where the data for the split would be local **/
  public abstract 
    String[] getLocations() throws IOException, InterruptedException;
}

RecordReader

Por último es necesario irle proporcionando a la tarea de mapeo las parejas clave-valor procedentes de la fuente de datos.

Hadoop realiza esta tarea a través de una clase de tipo RecordReader, que no es más que un iterador sobre los registros, que es utilizado por las tareas de mapeo para generar los registros (parejas clave-valor) que pasará a la función de mapeo. Por tanto el RecordReader se encarga de dividir los datos en parejas clave-valor para dárselos como entrada al Mapper.

En el caso de que sea necesario crear una clase RecordReader personalizada esta clase deberá de:

O bien implementar la interfaz definida por la vieja API MapReduce, o heredar de una clase que la implemente. La interfaz definida por la vieja API para la clase RecordReader (org.apache.hadoop.mapred.RecordReader) es:

public interface RecordReader <K,V> {  

  /** Reads the next key/value pair from the input for processing **/
  boolean next (K key, V value) throws IOException;     

  /** Creates an object of the appropiate type to be used as a key **/
  K createKey();      

  /** Creates an object of the appropiate type to be used as a value **/
  V createValue();    

  /** Returns the current position in the input **/
  long getPos() throws IOException;     

  /** Close this InputSplit to future operations **/
  public void close() throws IOException;     

  /** How much of the input has the RecordReader consumed i.e. has been processed by  **/
  float getProgress() throws IOException;    

}

O bien extender la clase abstracta definida por la nueva API MapReduce o heredar de una clase que la extienda. La clase abstracta definida por la nueva API para la clase RecordReader (org.apache.hadoop.mapreduce.RecordReader) es:

public abstract class RecordReader<KEYIN, VALUEIN> implements Closeable {

  /** Called once at initialization. **/
  public abstract void initialize(InputSplit split,
                                  TaskAttemptContext context
                                  ) throws IOException, InterruptedException;

  /** Read the next key, value pair. **/
  public abstract boolean nextKeyValue() throws IOException, InterruptedException;

  /** Get the current key **/
  public abstract KEYIN getCurrentKey() throws IOException, InterruptedException;
  
  /** Get the current value. **/
  public abstract VALUEIN getCurrentValue() throws IOException, InterruptedException;
  
  /** The current progress of the record reader through its data. **/
  public abstract float getProgress() throws IOException, InterruptedException;
  
  /** Close the record reader.**/
  public abstract void close() throws IOException;

}

En el siguiente post veremos como entre las alternativas disponibles para procesar datos de entrada en formato XML, nos encontramos con clases personalizadas de tipo InputFormat o de tipo RecordReader, que son capaces de tener en cuenta las características de este tipo de datos y de procesarlos convenientemente.

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.

Emprendimiento: Jornada de presentación de programas de ayudas a Emprendedores 2012 de Cantabria

El próximo lunes, 23 de julio, se va a celebrar en el salón de actos del Grupo SODERCAN, en el Parque Científico y Tecnológico de Cantabria (PCTCAN), una jornada donde se presentarán los Programas de Ayudas a Emprendedores 2012 de Cantabria.

En esta jornada, que será abierta por Eduardo Arasti (Consejero de Innovación, Industria, Turismo y Comercio del Gobierno de Cantabria), Miguel Cabetas (Consejero Delegado del Grupo Sodercan), Gema Díaz (Presidenta de CEOE-CEPYME Cantabria) y Modesto Piñeiro (Presidente de la Cámara de Comercio de Cantabria), se presentarán los programas de ayudas a emprendedores 2012 que SODERCAN va a poner en marcha y además se darán a conocer otros instrumentos a disposición de los emprendedores ofrecidos por el Servicio Cántabro de Empleo y otros organismos y empresas como ENISA, Banco Santander y Vodafone.

El programa de la jornada será el siguiente:

  • Apertura de la jornada
  • Grupo SODERCAN: Instrumentos de apoyo a emprendedores. Programa EMPRECAN 2012
  • Servicio Cántabro de Empleo: Programa de Ayudas para Emprendedores y Autónomos 2012
  • ENISA: Líneas de Financiación para Emprendedores
  • Grupo Banco Santander: Iniciativa Start-up Retos
  • VODAFONE: Programa de apoyo a emprendedores de Cantabria
  • ASOCEM: Asociación Cántabra de Emprendedores

La jornada se celebrará el próximo lunes 23 de julio, a partir de las 9:15 horas, en el Salón de Actos de SODERCAN (PCTCAN, C/Albert Einstein 4). Todos aquellos interesados en asistir, confirmar vuestra asistencia a través de la dirección de correo emprecan@gruposodercan.es.

Si eres un emprendedor en Cantabria, y quieres conocer los programas y ayudas a tu disposición, tienes una buena oportunidad de conocerlos mejor asistiendo a esta jornada.

Si quieres conocer el programa concreto de la jornada, puedes descargarlo de la siguiente ubicación: http://gruposodercan.es/Emprendedores_23_Julio.pdf