domingo, 26 de junio de 2011

El salvaje Internet


En los últimos meses, estamos viviendo una especie de película de aventuras en Internet, de hecho, algunos lo ven como una película del oeste y lo califican ya como un “webstern”.

Por un lado, tenemos a los chicos de Anonymous haciendo de “Los Vengadores” y a los de LulzSec haciendo de “Joker”. Los unos porque se han erigido en garantes de las libertades del pueblo y los otros porque se divierten mostrando las vergüenzas a nivel de seguridad de todo el que se cruza en su camino.

Para colmo, en los últimos días hemos visto lo que parecía un enfrentamiento entre Anonymous y LulzSec, por un supuesto “chivatazo” al FBI , por parte de Anonymous, sobre la identidad de algún integrante de LulzSec. Esto parecía que iba a ser “Furia de Titanes”, pero no, al final ha sido algo más parecido a “Ocean's Eleven” y se han juntado para fastidiar al SOCA (El FBI británico), en la operación #Antisec.

De repente, cuando todo el mundo estaba atento a la película, aparece un “To be continued...” y los chicos de LulzSec deciden retirarse de la escena, dejando en suspense al personal. Ya estamos acostumbrados a las segundas partes...

Alguno puede pensar que esto de buscar relaciones entre estos grupos y el séptimo arte no está justificado, pero si vamos a la página LulzSec Exposed, donde Anonymous le mete el dedo en el ojo a LulzSec, podemos leer en su cabecera “Web Ninjas” in Action. ¿Estará Jackie Chan detrás de todo esto?.

No tengo claro el final de esta película, de hecho, no se quienes son los buenos y quien los malos, es más, no tengo claro el fin a conseguir. Quizá, como ocurría en “El Plan Perfecto”, hasta el final no conoceremos los verdaderos motivos.

Internet es aún un territorio salvaje, donde hay mucho por conquistar, muchas leyes por aplicar y sobre todo, mucho sentido común por usar. Cada vez tenemos que estar más atentos a lo que hacemos en Internet y a lo que nos llega de Internet. No hay que tener miedo, que el miedo nunca es bueno, pero si hay que ser precavidos.

Me gustaría ser optimista y pensar que todos los acontecimientos que hemos vivido en los últimos meses, realmente servirán para hacer que este “agujero de gusano” que es Internet, acabe siendo un lugar más seguro por el que transitar. En realidad no hay nada nuevo que no viniera pasando desde hace años, pero últimamente si que está cambiando la forma en la que ocurren las cosas.

Quizá estemos viendo algo similar a lo que ocurrió años atrás, cuando los creadores de malware solo pretendían notoriedad, aunque si extrapolo los resultados..., me temo que algunas cosas van a cambiar de forma sustancial.

jueves, 16 de junio de 2011

Entonces... ¿Hadoop no es nada?

Efectivamente, podríamos decir que Hadoop, en sí, no es nada. No es nada al menos en el sentido en el que , equivocadamente, mucha gente piensa.

Hay una creencia bastante extendida de que Hadoop es una base de datos distribuida o una base de datos NoSQL (ver post Bases de datos NoSQL... ). No, no es eso. Veamos lo que sí es.

Hay infinidad de documentación sobre Hadoop en Internet, así que tampoco pretendo entrar demasiado en detalle, además, necesitaría más tiempo y más de un post. No es el objetivo.

Para empezar, podemos echar un vistazo a la página web de Hadoop (http://hadoop.apache.org/), donde ya nos deja claras las cosas desde el principio:
"La librería de software Apache Hadoop, es un framework que permite el procesamiento distribuido de grandes cantidades de datos a través de clusters de ordenadores, usando un modelo simple de programación"
Librería, Framework,...Vaya, que decepción, así que ¿para usarlo hay que programar?. Pues si, en efecto. Es lo mismo que si instalamos en nuestro ordenador el ".Net Framework 4.0". Nos da la herramienta, pero la casa la tenemos que construir nosotros.

El proyecto Apache Hadoop, consta de tres subproyectos: Hadoop Common, Hadoop HDFS y Hadoop MapReduce, que combinados de forma conjunta, nos proporcionan las herramientas necesarias para construir un sistema que, como dice el enunciado, nos permita procesar grandes cantidades de datos, en un modelo distribuido, con alta disponibilidad, usando un hardware barato y con un alto rendimiento. La verdad es que dicho así, suena muy bien.

Ya veremos más adelante lo que son Common, HDFS y MapReduce. De momento, vamos a centrarnos en las cinco características, que nos han llamado la atención:

Procesamiento de grandes cantidades de datos
Hadoop sirve para procesar GRANDES cantidades de datos, y digo GRANDES con mayúsculas, porque estoy hablando (es un decir) de muchos miles de millones de datos. Si no es el caso, pensemos en otra solución (aunque puedes seguir leyendo el post hasta el final).

Modelo distribuido
El que sea un modelo distribuido, no es solo una ventaja, es también una necesidad. Excepto si es para desarrollar, no sirve de nada montar un sistema basado en Hadoop con una sola máquina. Se puede hacer, pero como digo, solo para desarrollar o "cacharrear" con ello. De hecho, necesitaríamos al menos dos. (Cloudera proporciona una distribución bastante estable y sencilla, que permite simular un cluster en una sola máquina y se instala en unos pocos minutos).

Hasta aquí, lo que parecían ventajas, alguien lo puede ver como inconvenientes. Pero bueno, sigamos...

Alta disponibilidad
Esto está muy bien. Si se rompe una máquina, el sistema sigue funcionando. No perdemos los datos y el sistema se recompone para repartir la carga entre los nodos restantes. Evidentemente, cuantos más nodos tenga nuestro cluster, más protegidos estaremos frente al fallo de alguno de ellos.

Que el sistema siga funcionando pese a la caída de un nodo, no es nada especial, pero el que el sistema redistribuya la carga, si es una importante ventaja.

Hardware barato
Este es otro punto interesante. No necesitamos grandes máquinas, prácticamente cualquier PC con disco duro, procesador y memoria, nos sirve para incorporarlo al cluster, además no tienen por que ser todos los nodos iguales. Cada nodo soportará una carga proporcional a los recursos de los que dispone.

Para que no todo sean ventajas, hay que decir que en el apartado de networking, si es preciso gastarse unos euros. Montar un cluster de un par de docenas de nodos, con PC's de 300€, está muy bien, pero si los unimos con un switch de 10MB, por muchos nodos que añadamos, el rendimiento no mejorará.


Alto rendimiento
En este caso, la potencia no nos la proporciona Hadoop sino la acumulación de nodos al cluster, cuantos más nodos, más rendimiento. Obvio ¿no?.

Dado que podemos utilizar un hardware barato, incrementar la potencia de nuestro cluster, no requerirá una fuerte inversión, además, el escalado horizontal es prácticamente ilimitado.

Ya ha quedado claro al principio, que Hadoop es una herramienta, o más bien un conjunto de ellas:

Hadoop Commons: Son un conjunto de librerías y utilidades sobre las que se soportan el resto de subproyectos. Dan soporte para interactuar con el sistema de archivos distribuidos, gestionar el control de acceso a los nodos, colas de trabajos, etc..

HDFS (Hadoop Distributed File System): Es el sistema de almacenamiento distribuido en el que se soportan las implementaciones de Hadoop. Consta de un nodo primario o "NameNode" que  controla los "DataNodes", que son cada uno de los nodos donde finalmente se almacenan los datos.


MapReduce: Es en si el framework que nos permite desarrollar las aplicaciones que son capaces de procesar en paralelo los datos suministrados.

Los trabajos MapReduce se basan en la separación de los datos de entrada (tareas Map), que son enviados como entrada a las tareas de agregación o combinado (tareas Reduce). Que lío ¿no?.

La verdad es que puede parecer complicado pero en realidad es más simple de lo que parece. Pongamos el ejemplo tonto, que no tiene utilidad práctica, pero si didáctica:

Supongamos que tenemos un fichero de texto con varias líneas y queremos contar las palabras distintas que hay en el texto y saber cuantas veces aparece cada una de ellas.

El primer grupo de tareas Map, recibiría cada una de las líneas del fichero y se encargaría de separar cada línea en sus diferentes palabras. Estas palabras se pasarían a las tareas Reduce, que se encargarían de contar las apariciones de cada palabra, así en diferentes niveles de agrupación (tareas Reduce encadenadas), hasta conseguir el resultado final.

En realidad se trata de ir separando los datos hasta el nivel de granularidad adecuado y después agruparlos para conseguir la segmentación deseada.

¿El truco? tareas sencillas que realizan solo una parte del proceso. Si tenemos muchas de estas y trabajando todas a la vez, tenemos un resultado espectacular.

Y esto, a mi ¿para que me sirve?. Esta es la pregunta del millón.

Lo primero que hay que tener claro es que Hadoop no es la panacea para resolver los problemas de almacenamiento, disponibilidad, sustitución de bases de datos, etc.. Hadoop es bueno, pero solo para resolver unas problemáticas muy concretas.

Quizá, para no perder el tiempo, lo primero que se debería hacer es conocer "Que NO es Hadoop". Para empezar, recomiendo la propia Wiki de Hadoop.

Hadoop es una herramienta excepcional, pero solo si se utiliza para el propósito adecuado.

Aunque pueda parecer a simple vista algo muy complicado de poner en marcha, en realidad no lo es tanto. La instalación de los componentes es relativamente sencilla (Proveedores como Amazon, tienen disponibles nodos preinstalados listos para usar). En realidad, solo nos tenemos que preocupar de desarrollar nuestros programas MapReduce y para ello podemos utilizar varios lenguajes como Java, C++, Python, etc., así que alguno de ellos nos resultará más próximo y será más fácil comenzar.

viernes, 3 de junio de 2011

Yo no trabajo por 800 euros

Esta es la frase con la que me encontré haciendo un zapping la semana pasada. En realidad, creo que fue "Yo no trabajo por 800 míseros euros". Se trataba de un programa de televisión, en el que participaban entre otros, unos jóvenes del movimiento 15M.

En el punto en el que yo llegué, hablaban en concreto sobre lo difícil que lo tienen los jóvenes para encontrar un trabajo. Hasta aquí todos de acuerdo, pero mi sorpresa llegó cuando uno de ellos; que creo recordar nunca había trabajado; espetó la frase lapidaria "Yo no trabajo por 800 míseros euros".

Al oír la frase, me llamó la atención y seguí escuchando el debate. La verdad es que acabé impresionado, o más bien indignado, hasta tal punto que apagué la televisión.

Entiendo que un joven que acaba de terminar la carrera (no se si era el caso), aspire a un trabajo relacionado con sus estudios y con una retribución salarial acorde a su nivel de estudios o experiencia, si es el caso. Lo que no entiendo es como se puede hablar con desprecio de un trabajo de 800 euros.

Seguramente este joven (o esta, no lo recuerdo), vive en casa con sus padres, no le falta comida, ropa y dinero para gastar el fin de semana, porque sus padres se lo pueden permitir.

Supongo que si no tuviera el paraguas de sus padres y sin otra fuente de ingresos, no le haría tantos ascos a los 800 míseros euros. De hecho, hay familias enteras en este país, que viven con esos ingresos.

Aplaudo que los jóvenes reivindiquen reformas laborales, económicas o sociales, de hecho creo que lo deberían hacer más frecuentemente y con más ahinco. También estoy de acuerdo que en la situación económica actual, los jóvenes tienen muy complicado encontrar un trabajo, independizarse, etc.

A veces escucho decir, que antes los jóvenes lo tenían más fácil, había trabajo para todos. Es cierto que antes había más facilidad para encontrar trabajo, pero también creo que es cierto, que se ha perdido cierto "garbo" o "coraje" para saber buscarse la vida, aunque en esto, seguramente parte de la culpa recae en los propios padres.

La situación laboral es complicada para los jóvenes que buscan trabajo, pero no nos olvidemos que es complicada también para los que no son tan jóvenes y cuando se tienen responsabilidades, lo primero es saber buscarse la vida.

Hay un punto que me gustaría resaltar, y es que tan complicado es encontrar un trabajo como saberlo mantener. En esta vida nadie te regala nada.

No nos engañemos, las empresas no son ONGs y están ahí para ganar dinero, así que no nos van a dar nada que no nos hayamos ganado previamente. Bien es cierto que hay quién se aprovecha de la coyuntura para para dar una vuelta de tuerca más y engordar la cuenta de resultados a costa del sacrificio ajeno.

Un trabajo de 800 euros no es para toda la vida, pero puede servir para adquirir experiencia, saber valorar el trabajo y ser un primer paso para encontrar otro mejor.