lunes, 23 de abril de 2012

Open Data, qué estamos haciendo mal?


La semana pasada tuve el placer de ser invitado por Jordi Torres (@JordiTorresBCN) a dar una charla sobre Big Data en los seminarios de EEDC en lo que fue mi universidad, la UPC.

Además de la alegría de volver a la universidad y reencontrarme con colegas del BSC tuve la suerte de poder compartir espacio de charla con los chicos de The Data Republic  (@thedatarepublic), David Sánchez (@dasago78) y Genís Barrera (@genisbarrera)

Mi charla fue sobre la experiencia de trabajar en un entorno de Big Data, pero no es de esto de lo que quiero hablar hoy, voy a hablar de la charla que hicieron The Data Republic, se tituló: Open Data

Hace tiempo que no hablo mucho del tema, y la razón es que aunque inicialmente el movimiento Open Data me entusiasmó, debido básicamente a los experimentos del Datablog de The Guardian y de la lectura del libro Open Government de O'reilly el tema ha ido decayendo.

En su charla de Open Data contaron lo difícil que es transformar los datos abiertos de España en productos con valor, que al fin y al cabo es (o tendría que ser) la finalidad del open data, poder dar transparencia a lo que está haciendo el gobierno y sacar provecho de esto.

Este artículo no es una pataleta, que quede claro, pero voy a intentar hacer una lista objectiva de las cosas que están fallando en el Open Data español. Y voy a hacer esto sabiendo que no soy el único que lo pienso, ya que en la charla vi que todo el mundo comparte las mismas preocupaciones:


  1. Datos en pdf? venga ya. Queremos API's. No vale en poner un pdf colgado, ni un link a otra página con un layout totalmente distinto de otra organización para que luego haya que "scrapearla" (si puedes claro). Y un excel? además todos distintos? na na, no vamos bien.
  2. No cualquier dato. Muchos de los datos que se han abierto (no todos) son viejos, o no son lo que quisiéramos o no se actualizan.  Los programadores y defensores del Open Data debemos jugar nuestro papel en esto, esto se traduce en hacer aplicaciones que sean útiles. Verdad? pues bien, el problema es que yo personalmente (y mucha otra gente) no vemos como hacer una aplicación útil (y rentable ya ni te digo) con los datos que está publicados (o su frecuencia de actualización). Lógicamente si los programadores no hacemos aplicaciones para el gran público esto significa que nadie utiliza los datos abiertos y al fin del año, cuando desde el gobierno pidan los resultados de las apertura de datos los encargados que han estado sudando para hacerlo tendrán que decir: pues no los usa nadie, y lógicamente esto no ayudará la apertura de datos nuevos. 

No obstante, cabe decir que se han hecho grandes cosas dentro del mundillo Open Data español, sólo hace falte echarle una ojeada a la calidad de los proyectos presentados en Abredatos, podéis encontrar una lista aquí.

Entra en escena: Smart Cities!

No termino aquí, vamos a continuar el post ligando todo este tema (que me preocupa mucho) con las smart cities...

Probablemente habrán ustedes oído a hablar de las smart cities no? este concepto de ciudad inteligente, totalmente informatizada que es capaz de reaccionar, digámoslo así. Pues visto lo visto no tengo mucha confianza en que el gobierno/ayuntamientos sean los mejores para hacerlo. No se me entienda mal, no estoy diciendo que no tengan capacidad tecnológica (que la tienen), sino que veo un sinfín de problemas burocráticos para usar o abrir estos datos. Así que últimamente he estado pensando que la única manera de que el tema de smart cities tenga una salida decente es hacerlo bottom-up, desde los ciudadanos y para los ciudadanos.

Algo así como una gran API sobre un sistema de almacenamiento como los que facilita Amazon en que todos los usuarios (ciudadanos) puedan participar, ya sea leyendo de esta API (mediante aplicaciones) y escribiendo encima de ella. Algo así como Pachube + Open Data que de el gobierno/ayuntamiento + Public Data (según los chicos de The Data Republic datos al alcance de la gente (Twitter/Flickr/Foursquare/...)

Y no me digáis loco porque ya hay proyectos así empezando via @algonpaje. Será que la gente empieza a hartarse de los proyectos de "hacerse la foto con el ministro" ?

Sinceramente creo que esta es la única solución práctica y que pueda ser rentable para que todo esto tenga éxito.

Lógicamente, es sólo mi opinión.

viernes, 3 de febrero de 2012

Erlang


Hoy voy a escribir sobre lo que me ha mantenido ocupado en mis pocos ratos libres estos últimos meses, Erlang!

Hace tiempo que quería aprender algo nuevo, lógicamente que me fuera útil y que estuviera relacionado con los sistemas distribuidos y la escalabilidad, faltaría más. Así que me puse a buscar y di con 3 buenas opciones:

  • node.js
  • scala
  • erlang

Me gustó mucho node.js, pero debo admitir que el hecho de que sea javascript me hechó un poco para atrás (aclaración: no tengo NADA en contra de javascript, pero no es exactamente lo que estaba buscando). Así que estaba entre scala i erlang.

Erlang vs Scala

Por un lado tenemos un lenguaje de programación que corre en la máquina virtual de Java, actual, con toques funcionales y bastante hype, aunque no falto de críticas. Por el otro lado un lenguaje mucho más "underground", totalmente funcional y bastante más viejo. Los dos se adaptan bien a lo que quería, y además, los dos tienen un modelo de concurrencia basado en "actores".

Debo admitir que ya iba un poco predeterminado a escoger Erlang, aunque por temas de trabajo también me interesaba aprender un poco de Scala. Finalmente, tras unas pequeñas investigaciones y una pequeña incursión en Scala llegué a la conclusión de que el lenguaje es (para mi gusto) excesivamente complicado, no para aprender, sino ya para utilizar efectivamente, lo que en inglés llaman "overenginered". Lógicamente es una opinión personal.

Así que nada, eché una ojeada a Erlang (http://www.learnyousomeerlang.com) y finalmente me decidí a comprar el libro de o'reilly.

Erlang
Erlang es un lenguaje puramente funcional, con una sintaxis un poco barroca, que corre sobre una máquina virtual. Fue creado hace bastante tiempo (en términos informáticos) en Ericsson y fue abierto al público en 1998. No quiero ni describir el lenguaje ni hacer un mini tutorial, para esto tenéis la página que he puesto antes y la descripción en wikipedia.

Y qué pinta Erlang hoy en día ? pues básicamente su modelo de concurrencia, como he dicho antes, basado en actores, o lo que es lo mismo, un modelo de concurrencia sin variables compartidas, mediante envío de mensajes, asíncrono.

Pero hay alguien que utilice Erlang?
Pues si señores, seguro que os suenan estos proyectos (entre muchos otros):


Temas que hacen que erlang sea la caña:
Como ya he dicho no quiero entrar en detalle del funcionamiento de Erlang, ni de la sintaxis ni de las características del lenguaje, pero hay unos temas que me creo hay que destacar:

  • Asíncrono con envío de mensajes: Las comunicaciones entre procesos se hacen a base de enviar mensajes. Los procesos van realizando sus tareas y de vez en cuando miran su "mailbox", si hay algun mensaje, se lee y se hace lo que se tiene que hacer y se contesta. 
  • Hot code swapping: Uno de las características más espectaculares. Podemos hacer un update de código sin tener que reiniciarlo. No es eso el sueño de todo programador de backend?
  • Programación distribuida integrada: Igual que las comunicaciones entre procesos, pero en procesos en máquinas distintas, todo integrado en el 'core' del lenguaje, sin ningún tipo de librería externa.
  • Película: si señores, Erlang tiene una película.

Además, hay algunos links dignos de mención:



Del tutorial a producción

El hecho de que sea un lenguaje muy distinto de los que estoy acostumbrado a trabajar hace que sea un poco difícil de dominar, ya se sabe, para aprender hay que poner horas y experiencia, en términos informáticos: poner en producción. Intenté convencer a unos compañeros de un proyecto para utilizar Erlang, su respuesta fue que como vieran una sola linea de Erlang en el sistema me iban a colgar de lo más alto de un edificio muy conocido, así que de momento me estoy reservando a algún proyecto personal que ya tengo pensado y muy pronto (crucemos los dedos) empezaré.

jueves, 15 de diciembre de 2011

Es "Big Data" una buzzword?

Hace muy poco un amigo mío hizo un tweet:
"Es Big Data la siguiente Buzzword"?


Si además ponemos a la mezcla los posts en algunos posts bastante "mainstream" de algunos gurús de la informática pues ya tenemos una combinación un poco explosiva.

Mi opinión es que probablemente los comerciales, "gurús" y otros consigan que Big Data  sea una buzzword como lo ha sido cloud computing, IA, o grid computing. Y creo que es una lástima, para mi estas tecnologías tienen un sentido y una utilidad.

En general me hace gracia que las tecnologías con las que trabajo sean conocidas, me sale la vena hipster y puedo decir eso de: Yo trabajaba con Hadoop antes de que... pero llega un momento que el tema se hace cansado. Y lo digo porque de seguro ahora mucha gente va a coger sus productos de siempre y les va a meter "Big Data" para que sean más vendibles, van a empezar a salir "entendidos" y vamos a ver qué más. Hasta que salga la siguiente Buzzword, y a por otra cosa.

Para mi big data no es una tendencia, es un problema que existe. El cloud, el grid, la IA son metodologías, una mezcla de tecnologías, que han tenido más o menos éxito, que han sido tendencia y que han servido para sacar dinero de subvenciones para proyectos. Uno de los problemas que ha habido (en mi humilde opinión) es que se han intentado encontrar soluciones a problemas que no existían, creándose así un sinfín de tecnologías poco prácticas, flojas y muy poco realistas. Este pues, no es el caso, aquí primero estuvo el problema, luego la solución.

Big data no es una tendencia, es un problema.  Punto y final.

martes, 6 de septiembre de 2011

Visualizaciones de Big Data

Voy a hablar, más o menos, de un tema muy importante, pero que no domino mucho. Más bien, no domino ni de broma, pero debería. Me refiero a las visualizaciones.

Me paso el día hablando a gente de que Hadoop es la caña, que si terabytes de datos, que si Cassandra por aquí que si HBase por allá, pero siempre hay que "visualizar" los datos no?, si nos curramos todo esto, al menos que se pueda mostrar el trabajo.

La visualización es todo un mundo, hay que tocar un poco de matemáticas, un poco de estadística, informática y sobretodo arte.

Voy a intentar hablar un poco más sobre visualizaciones en este blog, pero hoy vengo preparado con un gran ejemplo.

Uno de mis ex-colegas en last.fm Martin Dittus (blog, last.fm, twitter) se ha currado una visualización de todos los scrobbles de todos los trabajadores (y ex-trabajadores de last.fm). En mi caso estamos hablando de la visualización de 129.000 canciones en 7 años.

Sobre este gran trabajo han aparecido comentarios en algunos lugares de la web, por ejemplo:

Vamos a ver la visualización de mi historia musical: 


http://last.fm/user/grindthemall 
Vamos a analizarla un poco, en el eje de las X podemos ver los años, empezé a usar last.fm en el 2005, cuando un compañero de Gridcat me lo enseñó. Bueno, durante los primeros meses y hasta el Julio del 2006 podemos ver una historia de scrobbles un poco difusa y repartida por las 24 horas del día, básicamente demostrando que tenía unos horarios un tanto animales durante mis años universitarios.

De repente los scrobbles se agrupan en 8/9 horas, si señores, empezé a trabajar en el B.S.C. con horario fijo.  Creí que se iba a ver un cambio en 2009, cuando me fui a vivir a Londres, pero parece que el cambio horario (sólo de una hora) no es suficiente como para visualizarse.

Más temas, interesantes, parece que mantuve una buena disciplina de escuchas durante bastante tiempo. El color ( de verde a rojo ) indica la intensidad de scrobbling, en mi caso se puede mapear fácilmente al tipo de música que escuchaba. Colores más verdes indican pocos scrobbles por hora (escuchando probablemente Dark Ambient o Post Metal) y las rojas indican muchos scrobbles por hora, probablemente Grindcore.

El próximo tema a destacar es Octubre del 2010 dónde claramente mi actividad baja, qué pasó? pues que me cogí 3 semanas y me fui a Nueva Zelanda. Y finalmente ya llegamos a Mayo de 2011, dónde mi actividad de scrobbles parece que empieza y termina antes, por una o dos horas, pues marca mi vuelta a España, con unos horarios un poco distintos a los que hacía de cuando estaba en el Reino Unido.

Qué os parece? visualizar 7 años de canciones (y cambios en mi vida) con una sola imagen.


lunes, 5 de septiembre de 2011

Taller de Hadoop en Zaragoza

El día 31 de Agosto dí una charla en Zaragoza sobre Hadoop, parte de los talleres que organiza Cachirulo Valley. Hoy quería subir las transparencias a slideshare cómo de costumbre, pero mirándolas me he dado cuenta de que no tiene mucho sentido ya que parece ser que mis presentaciones son muy gráficas. Así que he decidido hacer un pequeño resumen de la charla y colgarlo aquí. Espero que sirva para aclarar conceptos y como pequeña introducción a Hadoop.

Qué es Hadoop y para qué sirve ? 
Primero vamos a poner un problema, y luego alguien lo va a solucionar muy bien.
Por allí al 200X Google tenía un problema, y este problema era básicamente una cantidad gigante de datos con que trabajar. Las soluciones que había por aquel entonces o bien no eran lo suficientemente potentes o eran demasiado caras, así que teniendo los recursos, la gente de Google diseñó su propia solución, que finalmente implementó, provó, puso en producción y finalmente, explicó a la comunidad mediante una serie de papers:
  • MapReduce: Simplified Data Processing on Large Clusters del que ya hablé en este mismo blog.
  • The Google File System.
Poco después, Doug Cutting, que estaba participando en un proyecto llamado nutch tuvo el mismo problema, qué hacer con tantos datos? encontró el paper de google y se puso a implementarlo, así de fácil, y así nació Hadoop, la implementación libre de los dos papers de Google.

Aquí, igual que en el taller me voy a servir de una muy buena definición de Hadoop, de Parand Tony Darugar:
"Flexible infrastructure for large scale computational and data processing on a network of commodity hardware".
Vamos a analizar la frase:
  1. Data processing: Hadoop no está pensado para problemas matemáticos, no estamos calculando simulaciones, no estamos calculando grafos. Hadoop es para procesar datos. Si no tienes muchos datos de entrada te estás equivocando de Framework. 
  2. Network: I por qué en una red de ordenadores? pues porqué estás analizando tantos datos que no te caben en una sola máquina. Si los datos te caben en una sola máquina te estás equivocando de Framework. 
  3. Large Scale: Muchos datos y muchas máquinas. 
  4. Commodity Hardware: Tenemos una red de máquinas. El hardware va a fallar, estadísticamente los discos duros van a estropear-se, la RAM se averiará y las placas base se van a fundir. Si tenemos mucho hardware tenemos muchas posibilidades de que hayan desgracias, así que Hadoop está preparado para correr en máquinas "baratas". Si el hardware se va  a estropear y habrá que reemplazarlo, al menos que sea barato no?
  5. Flexible: Si sabemos que el hardware se va a estropear durante la ejecución, Hadoop debe estar preparado para soportarlo. Vamos a ver un poco más adelante más detalles de esto, pero para empezar diré que el sistema de ficheros tiene réplicas de los ficheros (por defecto 3), por lo tanto si una máquina se estropea durante la ejecución no pasa nada, el fichero está en 2 otras máquinas, Hadoop se va a enterar, va a clasificar la máquina como "averiada" y va a continuar el job en otra parte. 
Qué es Big Data? 
He insistido bastante en los "muchos datos", cuánto es exactamente "muchos datos"? pues es tan fácil como: "BIG DATA es cuando la cantidad de datos es un problema".

Para alguien serán 100 gb, para alguien serán 1Tb y para algun otro seran petabytes.

Vamos a profundizar un poco más con el tema del "problema". Yo personalmente creo que hay 3:
  1. Tiempo: Las herramientas que uso funcionan bien con esta cantidad de datos, pero tarda mucho. Vamos a imaginar que tenemos una base de datos sobre la qual hay que correr una serie de procesos, el departamento de márketing necesita datos actualizados cada 10 horas. Si el proceso finaliza, pero tarda 15 horas tenemos un problema.
  2. Las herramientas dejan de funcionar: Tenemos un programa que funciona bien, crecen los datos y la herramienta cada vez va más lenta, pero no es un problema. Llega un momento que la herramienta simplemente de queda congelada con el input de datos. Tenemos otro problema. 
  3. Los datos no caben en la máquina: Tenemos 1 Terabyte (o lo que sea) de datos a tratar y simplemente los datos no caben en la máquina y hay que moverlos a trozos por la red. 

Worflow de trabajo en Hadoop. 
Ya sabemos qué hace Hadoop y ya sabemos cuándo tiene sentido empezar a utilizarlo. Ahora bien, cómo se trabaja?
Hadoop consta de dos partes (como veremos en más detalle en el siguiente punto), un motor de map/reduce y un sistema de ficheros distribuido. Lo más importante en este punto es que nos imaginemos a Hadoop como una caja negra que es capaz de almacenar y transformar datos. Por lo tanto para trabajar lo que tenemos que hacer es:
  1. Poner los datos nuevos en Hadoop (en caso de que haya): Ponemos los logs del día, los usuarios que se han dado de alta hoy, los eventos del día, etc, en el sistema de ficheros. 
  2. Tratar los datos con un programa map/reduce. 
  3. Sacar los datos del sistema de ficheros para ponerlos a un lugar dónde sean útiles. Vamos a recordar que de momento Hadoop es una caja negra, no es fácil que los del departamento de márketing usen los datos que hay en Hadoop, así que hay que sacarlos de allí y ponerlos en una base de datos, una nosql, una página web, lo que sea.

Cómo funciona Hadoop? (Map/Reduce y su amigo el DFS)
Hemos dicho que Hadoop almacena y transforma datos, almacena con un sistema de ficheros y trata los datos con un motor de map/reduce, vamos a verlos:

(H)DFS: Hadoop Distributed File System.
Vamos a empezar por el sistema de ficheros distribuido. Vamos a dejar claro que un sistema de ficheros distribuido es un tema muy serio y complejo. Nadie quiere poner sus ficheros en un sistema experimental con el riesgo de que desaparezcan ficheros, se corrompan o sean inaccesibles, por lo tanto, el principal requerimiento es su estabilidad y robustez.

El HDFS fue diseñado a partir del paper del Google File System, no me voy a liar mucho con la explicación de cómo funciona, pero voy a comentar algunas de sus características más importantes:
  • Simple by design: Aunque internamente un sistema de ficheros es muy complejo, el HDFS ha sido diseñado y implementado con un conjunto muy básico y limitado de funcionalidades. Así que no nos podemos esperar grandes "virguerías", al menos a nivel de usuario.
  • Robusto y replicado: Es robusto, recordemos que Hadoop está diseñado para ejecutarse en redes de hardware que puede estropearse en cualquier momento. El sistema de ficheros debe ser capaz de continuar trabajando efectivamente hasta un cierto nivel de error tolerable. Una de las características más importantes es que los ficheros están partidos por bloques, y que cada bloque está replicado 3 veces en el clúster, así que si una máquina cae o un disco duro se estropea no pasa nada, aún tenemos dos copias del bloque del fichero en la red.
  • Optimizado para Big Data: Los bloques son de 64 mb por defecto, por lo tanto, optimizado para la lectura y escritura de volumenes de datos grandes.
  • Escalable: El sistema debe escalar horizontalmente, si necesitas más espacio es tan fácil como poner más máquinas o ampliar los discos duros. El máster se va a encargar de repartir los bloques entre los nuevos nodos de forma transparente. 
  • Transparente: Hemos dicho que el sistema es sencillo de cara al usuario y que es robusto y escalable, que es tolerante a fallos y que balancea su carga automáticamente y además, sin que el usuario se entere de lo que está pasando. El nodo máster se encarga de todo de forma totalmente transparence. En caso de que una máquina se estropee, el máster va a encargarse de ponerla en una lista negra y va a mirar qué bloques de ficheros contenía, y va a replicarlos (cogiéndolos de otras máquinas) hasta que el número de replicas vuelva a ser el deseado.
A nivel un poco más técnico, todo el sistema de ficheros está controlado por un nodo máster que se llama el NameNode, podéis ver más información aquí.

Map/Reduce
El motor de map/reduce es la parte que realiza los cálculos y transformaciones sobre los datos. Básicamente se trata de una serie de componentes software que ejecutan un programa, programado en Java (o alguna otra alternativa que veremos más tarde) que sigue el model de programación del mismo nombre (map/reduce).

Bien, pero qué es esto del map/reduce? pues se trata de un esquema de programación paralela que tiene sus orígenes en la programación funcional. Encontraréis mucha más información por la red, pero lo básico y lo importante ahora mismo es entender un poco el concepto, que es bastante sencillo.

Tenemos un problema, A, este problema es muy grande y no se puede tratar de forma individual, por lo tanto vamos a coger una función, a la que llamaremos mapper y la vamos a aplicar a trozos de A, de forma que tendremos:
 A1 --> Mapper --> A'1  
 A--> Mapper --> A'2
  ...
 A--> Mapper --> A'x

Ya tenemos parte del problema resuelto, pero en trozos, ahora toca aplicar el reducer, que es otra función que sabe interpretar y juntar los pequeños resultados que nos ha dado el mapper. De tal modo que:
[A'1, A'2, ... , A'x] --> Reducer --> Resultado.
No es más que aplicar el 'divide y vencerás' sobre un fichero muy grande. Lógicamente no todos los problemas se pueden resolver con este modelo de programación, es por esto que cale ver si Hadoop es la mejor solución antes de lanzarnos a crear un proyecto.


Ejemplos de código: 
En el taller vimos un par de ejemplos (muy básicos y sencillos cabe decir). Están colgados en github y bastante comentados. Otro recurso para tutoriales de programación Java en Hadoop en su página oficial, bastante más completo.

Clúster virtual en EC2 vs Clúster local. 
Tengo que admitir que soy bastante novato en este aspecto. Siempre he tenido la suerte de trabajar con un clúster dedicado así que eché una ojeada rápida para crear un pequeño clúster virtual en EC2. Según he visto hay 3 possibilidades:
  1. Pico y pala: Creas los nodos manualmente y te instalas Hadoop. 
  2. Scripts en el src de Hadoop.
  3. Apache Whirr.
Lógicamente escogí la más rápida, en este caso Whirr, que es un proyecto que trata de facilitarnos la creación de clústeres en plataformas de virtualización. El proyecto es bastante joven y aún le falta, pero ya se puede utilizar con unos resultados muy satisfactorios. Con este simple fichero de configuración pude crear un cluster en amazon: 
whirr.cluster-name=hadoop
whirr.instance-templates=
  1 hadoop-namenode+hadoop-jobtracker,
  2 hadoop-datanode+hadoop-tasktracker
whirr.provider=aws-ec2
whirr.identity=*************
whirr.credential=***********
whirr.hardware-id=c1.xlarge
whirr.image-id=us-east-1/ami-da0cf8b3
whirr.location-id=us-east-1
Creo que es bastante autoexplicativo, pero podéis encontrar más detalles en su página web.

La clara ventaja sobre los clústeres virtuales sobre los clústeres físicos es claramente la inversión inicial ya que no hay que comprar las máquinas (y el espacio en el datacenter), ni pagar mensualmente la electricidad + mantenimiento, bla bla. Aunque sí que tengo que decir que he oído que el rendimiento de un clúster dedicado es mucho mayor a la que nos encontraremos utilizando un clúster virtual. Del orden de 10 veces más rápido, aunque este número tendría que verse de forma un poco más "científica", cómo dije, esto es un rumor que me dijo un usuario de EC2 que se pasó a clúster dedicado.

Ecosistema de Hadoop
Hasta ahora he hablado del core de Hadoop. Como se ha visto es muy potente, pero es bastante espartano y no da muchas facilidades amigables al usuario o programador. No obstante el proyecto tuvo una gran adopción, debido a que era software libre y a que básicamente era lo único disponible. Esto causó que muchas empresas pusieran recursos para mejorar el proyecto y crear pequeños proyectos auxiliares que con el tiempo se han convertido en partes importantes de un ecosistema muy activo.

Podéis encontrar más información sobre los proyectos que considero más interesantes en un post que ya escribí en este mismo blog.

Preguntas?
Esto ha sido una pequeña introducción a Hadoop, muy a grosso modo y sin entrar en detalles peliagudos. Como siempre, si tenéis alguna duda no dudéis en preguntarla en la sección de comentarios o bien contactando conmigo.

martes, 29 de marzo de 2011

Hadoop NG, o cómo liarla gorda.

Hace un tiempo vi en diferentes blogs de Yahoo! su propuesta para una reimplementación de una parte bastante importante de Hadoop. Una propuesta interesante, pero que creí bastante teórica. Bueno, pues la semana pasada pude ir a otra edición del grupo de usuarios de hadoop del reino unido, en el que Owen O'malley mismo presentó estas mismas ideas a la comunidad, podéis ver la página del evento así como las presentaciones en: 


Entrando un poco más en detalle. Esta propuesta (que está en fase de testing en Yahoo! por lo tanto, de teórico nada) se trata de sustituir el JobTracker de Hadoop (la parte que lanza los jobs a los diferentes nodos que forman el cluster de Hadoop) por dos nuevos elementos: 

  • Un Resource Manager / Scheduler: El cual cogerá los requerimientos del job en concreto y buscará un nodo capaz de poder realizarlo.
  • Un Node Manager en cada nodo: El cual monitorizará el nodo y informará al Resource Manager. Dentro de este nodo el Node Manager será capaz de crear un container, dentro del qual se ejecutará el mapper, el reducer, y lo que es más interesante: o lo que sea. Ya que este diseño pretende hacer de Hadoop un framework de programación distribuido general. 
podéis encontrar más información ( y mucho más detallada ) en: 

Mis primeras impresiones fueron bastante negativas. En primer lugar porque estamos sustituiendo un elemento QUE FUNCIONA de Hadoop por otro de mucho más complejo. Y en segudo lugar por la complejidad de este segundo elemento. No quisiera parecer conservador pero mis temores se fundamentan en la experiencia que tuve con otros middlewares de computación distribuida, en los que estabas más tiempo definiendo las características del job en un "formato simple de definición genérica de jobs" en XML que programando el job en sí mismo.

Otro aspecto es que como ya he dicho anteriormente este Node Manager permitiría no sólo crear containers con mappers o reducers, sino otro tipo de containers (implementados por la comunidad) en los que se podría lanzar otro tipo de procesos (intensivos de CPU, MPI, ...). Tampoco me hizo mucha gracia esto, y otra vez fue por culpa de alguna mala experiencia. Lo que me gustó de Hadoop desde el principio es que era un framework que sólo hacía una cosa, pero que la hacía muy bien. Cosa que no hacían otros, que intentaban hacer muchas cosas diferentes y no hacían nada bien.

Aproveché la ronda de cervezas del final de la reunión para ver más opiniones acerca de estos cambios, las conclusiones que saqué es que la gente es muy optimista, frases que oí mucho: 
  • La comunidad hadoop será capaz de hacerlo bien.
  • Asi podremos aprovechar el cluster para más cosas. 
Veremos qué tal la primera, espero que si :) en cuando a la segunda, es pura verdad. 

Estoy viendo muchos clústers dedicados 100% a hadoop/map reduce. Esto no es necesariamente malo, pero como no me canso de decir, Map Reduce es un modelo de programación y va muy bien para unas cosas y va muy mal para otras. El hecho de que sólo haya instalado Hadoop en un cluster hace que todo tenga que estar programado siguiendo una estrategia map/reduce o tengamos que instalar otro framework  (Condor/Globus/...) en las mismas máquinas. Por ejemplo he sido testigo de un intento (que acabó en nada) de implementar un Load Tester con Hadoop, cuando claramente map/reduce no es el modelo más apropiado (que se puede hacer ojo!, simplemente digo que hay cosas mejores). 

Si la comunidad Hadoop consigue hacerlo bien Hadoop se puede convertir en un framework de sistemas distribuidos _genérico_, cosa que facilitaría mucho la tarea de administradores de sistema, ya que sólo tendríamos que tener Hadoop instalado. Pero bueno, estamos hablando de largo plazo.

Asi que más o menos, cambié de opinión, aún me quedan dudas sobre la complejidad de estos nuevos componentes.

jueves, 17 de marzo de 2011

Open Data Manual

Me acabo de encontrar esto por los Internets:

http://opendatamanual.org/

Se trata de un documento que pretende, cito:
This report discusses legal, social and technical aspects of open data. The manual can be used by anyone but is especially designed for those seeking to open up data. It discusses the why, what and how of open data — why to go open, what open is, and the how to ‘open’ data
Muy interesante el contenido (aún no he tenido oportunidad de leerlo todo, pero bueno) y también el formato, dónde te permite hacer comentarios y discusiones en cada parágrafo.