2012-10-01 31 views
18

Por lo que he entendido, Hadoop es una cosa del sistema de almacenamiento distribuido. Sin embargo, lo que realmente no entiendo es, ¿podemos reemplazar RDBMS normal (MySQL, Postgresql, Oracle) con Hadoop? ¿O Hadoop es solo otro tipo de sistema de archivos y podemos ejecutar RDBMS en él?Hadoop y Django, ¿es posible?

Además, ¿se puede integrar Django con Hadoop? Por lo general, ¿cómo los frameworks web (ASP.NET, PHP, Java (JSP, JSF, etc.)) se integran con Hadoop?

Estoy un poco confundido con el Hadoop vs RDBMS y agradecería cualquier explicación. (Lo siento, he leído la documentación muchas veces, pero tal vez debido a mi falta de conocimiento en inglés, la documentación me resulta un poco confusa la mayor parte del tiempo)

+0

No he usado Hadoop. Acabo de leer la página principal. Creo que es solo una solución de sistema de archivos. No reemplazará un RDBMS, y puede que no funcione bien con uno. Creo que poner una base de datos en un disco lógico distribuido en varias máquinas puede causar serios problemas de rendimiento; eso garantiza más investigación si vas a intentarlo. – dokkaebi

+0

Hadoop funciona en archivos grandes y no tiene indexación. Si desea acceso aleatorio a los datos, necesita HBase. Ambos crecen en HDFS, que administra archivos enormes en un clúster. Voy a dar una mejor explicación más tarde :-) – romedius

+0

@romedius, por favor, no puedo esperar :). Hasta ahora, todas las lecturas que he realizado me hacen más confundido. –

Respuesta

21

¿Qué es Hadoop?

Imagina el siguiente reto: tienes muchos datos, y con muchos quiero decir al menos Terabytes. Desea transformar estos datos o extraer algunas informaciones y procesarlas en un formato indexado, comprimido o "digerido" de forma que pueda trabajar con él.

Hadoop puede paralelizar ese trabajo de procesamiento y, aquí viene la mejor parte, se encarga de cosas como el almacenamiento redundante de los archivos, la distribución de la tarea en diferentes máquinas en el clúster, etc. (Sí, necesita un clúster , de lo contrario, Hadoop no podrá compensar la pérdida de rendimiento del marco).

Si echa un vistazo al ecosistema de Hadoop, encontrará 3 términos importantes: HDFS (Hadoop Filesystem), Hadoop mismo (con MapReduce) y HBase (el almacén de columnas "database", que no se ajusta exactamente)

HDFS es el sistema de archivos utilizado por Hadoop y HBase. Es una capa adicional en la parte superior del sistema de archivos regular en sus hosts. HDFS corta los archivos cargados en fragmentos (normalmente 64 MB) y los mantiene disponibles en el clúster y se ocupa de su replicación.

Cuando Hadoop ejecuta una tarea, obtiene la ruta de los archivos de entrada en el HDFS, la ruta de salida deseada, un asignador y una clase de reductor. Mapper and Reducer suele ser una clase Java pasada en un archivo JAR. (Pero con Hadoop Streaming puede usar cualquier herramienta de línea que desee). El asignador está llamado a procesar cada entrada (generalmente por línea, por ejemplo: "return 1 si la línea contiene una mala palabra F *") de los archivos de entrada, la salida pasa al reductor, que combina las salidas individuales en un deseado otro formato (por ejemplo: adición de números). Esta es una forma fácil de obtener un contador de "mala palabra".

Lo bueno: el cálculo de la asignación se hace en el nodo: procesa los fragmentos linealmente y mueve solo los datos semidigeridos (generalmente más pequeños) a través de la red a los reductores.

Y si uno de los nodos muere, hay otro con los mismos datos.

HBase aprovecha el almacenamiento distribuido de los archivos y almacena sus tablas, divididos en fragmentos en el clúster. HBase proporciona, al contrario que Hadoop, acceso aleatorio a los datos.

Como ve, HBase y Hadoop son bastante diferentes a RDMBS. También HBase carece de muchos conceptos de RDBMS. Modelar datos con desencadenadores, declaraciones preparadas, claves externas, etc. no es lo que HBase pensaba hacer (no estoy 100% seguro de esto, entonces corríjanme ;-))

Can Django integrado con Hadoop?

Para Java es fácil: Hadoop está escrito en Java y todas las API están ahí, listas para usar.

Para Python/Django No lo sé (todavía), pero estoy seguro de que puedes hacer algo con Hadoop streaming/Jython como último recurso. Encontré lo siguiente: Hadoopy y Python in Mappers and Reducers.

+0

P.s .: Agregaré algunos enlaces más tarde :-) – romedius

+0

Explicación impresionante. Entonces, solo por curiosidad, ¿es más probable que HBase sea igual que RDMS? (Me refiero a la curva de aprendizaje, la familiaridad, etc.) –

+2

HBase se puede considerar una base de datos (¡NoSQL! ¡Yay!), Hadoop es más como un monstruoso motor de procesamiento de datos en la parte superior de un sistema de archivos distribuido. Algunas personas abusan de Hbase y Hbase para casos de uso de Data Warehousing. Si ese es el enfoque correcto, es parte de otra discusión. – romedius

1

básico (!) Ejemplo de integración Django con Hadoop [Enlace eliminado]

lo uso Oozie REST API para la ejecución del trabajo, y 'gato hadoop' para agarrar resultados de trabajo (debido a HDFS' naturaleza distribuida). La mejor opción es usar algo como Hoop para obtener datos HDFS. De todos modos, esta no es una solución simple.

P.S. Refactoreé este código y lo coloqué en https://github.com/Obie-Wan/django_hadoop. Ahora es una aplicación django separada.

+0

¿Cómo se usa? ¿Podría agregar algún doc por favor? – lizzie

+0

Se actualizó el archivo README. Siéntase libre de agregar un problema con sus preguntas sobre github. Buena suerte. –

3

Django se puede conectar con la mayoría de los RDMS, por lo que puede usarlo con una solución basada en Hadoop.

Tenga en cuenta que Hadoop es muchas cosas, por lo que desea algo con baja latencia como HBase, no intente utilizarlo con Hive o Impala.

Python tiene un enlace basado en el ahorro, happybase, que le permite consultar Hbase.

Cuestiones relacionadas