Bueno, esto es una pregunta muy amplia. Hay que tener en cuenta muchas cosas, pero lo que veo una vez y otra es el problema de espacio. Los problemas vienen por falta de espacio en el clúster (más que las máquinas no sean lo suficiente potentes como para procesar los datos rápidamente). Ten en cuenta que es importante que las máquinas tengan muchos discos duros, que no sean caros (porque se van a estropear).
- Beneficiós e incovenientes,
Aquí otra pregunta amplia :) y sobretodo depende de lo que estáis haciendo con los datos. La verdad es que sin saberlo no te puedo decir mucho, lo que si es que con hadoop es relativamente fácil implementar programas que saquen más información de lo que podrías sacar con SQL. También tienes herramientas como PIG que sirven para facilitar la escritura de jobs y demás. Seguro que otra gente de la lista te puede dar más detalles.
Para mi el principal beneficio de usar Cassandra/Hadoop como almacenamiento de datos es que te da una muy buena tolerancia a fallos y una muy buena escalabilidad horizontal. Si necesitas más potencia pones más máquinas commodity.
No se exactamente a qué te refieres? Si te refieres a permisos/seguridad vas a ver que Hadoop no está muy avanzado en esto. Siempre se ha tenido la idea que el cluster de Hadoop va a ser interno. Aún así se que se ha trabajado bastante en añadir Kerberos. Luego tiene un sistema de permisos de usuarios muy muy simples, pero te pueden servir. Siento no poder ayudar más en este punto.
La arquitectura dependerá muchísimo de lo que estés intentando hacer. Las típicas arquitecturas de Hadoop/Nosql para data warehousing que he visto son más o menos:
1) Introducir datos en el cluster mediante scripts (o ahora mismo, apache flume).
2) En caso de que trabajes con Hadoop + cassandra, introducir los datos directamente a Cassandra.
3) Tener un scheduler o una serie de scripts que dia a dia agreguen información y en definitiva la traten.
4) Guardar los datos tratados en Cassandra/HDFS, borrar los datos temporales, en caso de que haya y generar las "vistas" o lo que serían los datos que tienen que estar MÁS accesibles. Por ejemplo, imagínate que tienes el siguiente worklfow:
- Coges los datos de hoy.
- Coges los datos anteriores.
- Realizas unas operaciones.
- Guardas el resultado de las operaciones en una tabla de Cassandra para que vuestra web (o lo que sea) los pueda leer bien.
- Agregas los datos de hoy con los de ayer y "sobrescribes" los anteriores porque los vas a necesitar mañana.
Espero que haya sido claro.
En caso de la agregación de datos, ten en cuenta que Hadoop es un sistema de batch, hay mucha gente que complementa la fuerza bruta batch de Hadoop con jobs diarios por ejemplo y luego sobre estos resultados aplica Storm para calcular los intervalos más pequeños. Otro ejemplo:
- Necesitas los datos actualizados "real time":
- Cada dia coges los datos que has recibido hoy y los machacas con Hadoop.
- Con storm agregas los datos real time con los datos de Hadoop.
- Al finalizar el dia Hadoop vuelve a recalcular los datos y haces que Storm coja como base lo que ha hecho Hadoop.
Espero que todo se haya entendido medianamente bien, no dudes en reclamar aclaraciones o "ampliaciones".