martes, 14 de julio de 2009

Hadoop al alcance de la billetera



El otro día no podía dormir y me puse a ver qué era hadoop y por qué había tanta alaraca en internet.

También busqué aplicaciones reales. O sea leí que yahoo lo usa, que estaba basado en algo de google, que estaba hecho en java y que ganó la GraySort competition ordenando 1 terabyte de datos en 209 segundos.

Lo que necesitaba saber era qué aplicación real tenía. Para qué lo usan Facebook y yahoo?

Vi varias webpages. Parece primero Google innovó resolviendo la necesidad de tener cada vez más grandes y mejores computadoras que no se caigan ni rompan nunca, dando vuelta el problema y apostar por computadoras baratas, que gasten menos energía, quizá se rompan más, pero con un software que tolere todos esos fallos.

A eso lo ví en este video (muy recomendable para entender qué es google como un todo, qué busca, y cómo se relaciona con la innovación): Innovation at google de Douglas Merrill 51'47''.

Computación Distribuída como la entiendo yo
Bastante quilombo se me hace cuando pienso en términos de threads en java. El tema distribución de servers, instancias, clusters, comunicación, etc, etc. Es como para marearse. Pero si en cambio en algún momento estudiamos o aplicamos algo de programación funcional. Se puede entender el map y reduce donde:
map(F, L) -> L'
aplica a cada elemento de la lista L la función F y retorna la lista de resultados.
reduce(F,L) -> R
aplica F, una función de 2, a los elementos de L tal que luego de obtener el resultado de aplicar a 2 elementos, se aplica al siguiente elemento con el resultado obtenido. Y así hasta obtener un solo resultado.

En un ejemplo
map(quad,[1, 2, 3]) = [1, 4, 9]
reduce(sum, [1, 4, 9]) = 14

Una vez entendido esto se pone un ejemplo: Si yo tuviese una lista de 100.000.000 de elementos terminaría de aplicar un map mucho más rápido si tuviese en vez de una pc varias, haciendo la computación al mismo tiempo sobre un subconjunto local de la lista. Con reduce ocurriría algo similar, algunos agarrarían los elementos de la lista, otros reduce los resultados de aplicar 1 o más veces reduce a los elementos originales, y así siguiendo.

Google desarrolla el famoso MapReduce haciendo algo similar a lo que expliqué pero esta tecnología es privada. Así también como la solución de storage distribuído que tolera fallos de hard.

Pero publicó unos papers los cuales fueron suficientes como para que Doug Cutting desarrolle su propia versión.
seguir leyendo...

Me resulta fascinante cómo Cutting desarrolla una tecnología y no la puede probar con varios teras hasta que por fin lo llaman de Yahoo.

Luego, como para ir redondeando, yahoo enriquece hadoop, luego facebook.

Luego se juntaron 3 ingenieros. 1 de google, otro de yahoo, otro de facebook y ahí nació Cloudera.

No tiene sentido que explique lo genial que es el sitio y lo accecible que es toda la información así como los training sobre hadoop y las tecnologías circundantes (pig, hive, hdfs...).

También cuentan con un configurador de imágenes de hadoop. Hadoop en distintas versiones.

Lo que más me fascinó es que lo primero que viene a la mente al escuchar computación distribuida, clusters, etc es "voy a estudiar mucha teoría pero dónde mongo me prestan un cluster para probar???"

Y la respuesta es: en amazon. Sus webservices contienen todo lo necesario. Y además es barato.

Acá cuentan con lujo de detalle cómo Tom White procesa 6 semana de logs (100gb) en un job escrito en java que tarda 35 minutos en 20 instancias. Utiliza EC2 y S3 y termina pagando 2 U$S + costo de transferencia externa y storage (para llevar los 100gb a S3).


Ahora lo que falta es tener un problema grande a mano como para probar esta tecnología.


Impresionante uso de hadoop por parte de facebook



No hay comentarios: