Diferencia entre HBase y Hadoop / HDFS


130

Esta es una pregunta ingenua, pero soy nuevo en el paradigma NoSQL y no sé mucho al respecto. Entonces, si alguien puede ayudarme a comprender claramente la diferencia entre HBase y Hadoop, o si da algunos consejos que podrían ayudarme a comprender la diferencia.

Hasta ahora, hice un poco de investigación y acc. Según tengo entendido, Hadoop proporciona un marco para trabajar con fragmentos de datos sin procesar (archivos) en HDFS y HBase es un motor de base de datos por encima de Hadoop, que básicamente funciona con datos estructurados en lugar de fragmentos de datos sin procesar. Hbase proporciona una capa lógica sobre HDFS tal como lo hace SQL. ¿Es correcto?

Por favor, siéntase libre de corregirme.

Gracias.


77
¿Quizás el título de la pregunta debería ser "Diferencia entre HBase y HDFS" entonces?
Matt Ball

Respuestas:


248

Hadoop es básicamente 3 cosas, un FS (Hadoop Distributed File System), un marco de cómputo (MapReduce) y un puente de administración (Yet Another Resource Negotiator). HDFS le permite almacenar grandes cantidades de datos de manera distribuida (proporciona un acceso de lectura / escritura más rápido) y redundante (proporciona una mejor disponibilidad). Y MapReduce le permite procesar estos enormes datos de manera distribuida y paralela. Pero MapReduce no se limita solo a HDFS. Al ser un FS, HDFS carece de la capacidad de lectura / escritura aleatoria. Es bueno para el acceso secuencial a datos. Y aquí es donde HBase entra en escena. Es una base de datos NoSQL que se ejecuta en la parte superior de su clúster Hadoop y le proporciona acceso aleatorio de lectura / escritura en tiempo real a sus datos.

Puede almacenar datos estructurados y no estructurados en Hadoop y HBase también. Ambos le proporcionan múltiples mecanismos para acceder a los datos, como el shell y otras API. Y, HBase almacena datos como pares clave / valor en forma de columnas, mientras que HDFS almacena datos como archivos planos. Algunas de las características más destacadas de ambos sistemas son:

Hadoop

  1. Optimizado para el acceso de transmisión de archivos grandes.
  2. Sigue la ideología de escribir una vez, leer muchos.
  3. No admite lectura / escritura aleatoria.

HBase

  1. Almacena pares clave / valor en forma de columnas (las columnas se agrupan como familias de columnas).
  2. Proporciona acceso de baja latencia a pequeñas cantidades de datos desde un gran conjunto de datos.
  3. Proporciona un modelo de datos flexible.

Hadoop es más adecuado para el procesamiento por lotes fuera de línea, mientras que HBase se usa cuando tiene necesidades en tiempo real.

Una comparación análoga sería entre MySQL y Ext4.


¿Qué pasa con el uso de hbase como datalake para grandes cantidades de datos (archivos pequeños)? ¿puede manejar tantos datos como hdfs?
Mehdi TAZI

@MehdiTAZI definitivamente. HBase se ejecuta sobre HDFS, por lo que no debe preocuparse por la escalabilidad. solo necesita asegurarse de que está usando HBase como debe usarse para obtener el máximo rendimiento
Tariq

¿Qué pasa con los problemas operativos?
Mehdi TAZI

No diría que HBase es la pesadilla del equipo de operaciones, pero tiene algunas áreas donde todavía hay un margen de mejora, y la comunidad está trabajando muy duro para solucionarlo. Pero eso es cierto para cualquier software. No hay herramienta / tecnología a prueba de problemas en mi humilde opinión. Si se ajusta a tus necesidades, definitivamente deberías probarlo. Es una herramienta de laberinto para manejar sus necesidades aleatorias de lectura / escritura en tiempo real.
Tariq

22

El proyecto Apache Hadoop incluye cuatro módulos clave

  1. Hadoop Common : las utilidades comunes que admiten los otros módulos de Hadoop.
  2. Sistema de archivos distribuidos de Hadoop (HDFS ™) : un sistema de archivos distribuido que proporciona acceso de alto rendimiento a los datos de la aplicación.
  3. Hadoop YARN : un marco para la programación de trabajos y la gestión de recursos de clúster.
  4. Hadoop MapReduce : un sistema basado en YARN para el procesamiento paralelo de grandes conjuntos de datos.

HBase es una base de datos escalable y distribuida que admite el almacenamiento de datos estructurados para tablas grandes. Al igual que Bigtableaprovecha el almacenamiento de datos distribuido proporcionado por el Sistema de archivos de Google, Apache HBase proporciona capacidades similares a Bigtable además de Hadoop y HDFS.

Cuándo usar HBase:

  1. Si su aplicación tiene un esquema variable donde cada fila es ligeramente diferente
  2. Si encuentra que sus datos están almacenados en colecciones, todo está tecleado en el mismo valor
  3. Si necesita acceso de lectura / escritura aleatorio en tiempo real a sus Big Data.
  4. Si necesita acceso basado en claves a los datos al almacenar o recuperar.
  5. Si tiene una gran cantidad de datos con el clúster Hadoop existente

Pero HBase tiene algunas limitaciones.

  1. No se puede usar para aplicaciones transaccionales clásicas o incluso análisis relacionales.
  2. Tampoco es un sustituto completo de HDFS cuando se realiza MapReduce en lotes grandes.
  3. No habla SQL, tiene un optimizador, admite transacciones o uniones cruzadas.
  4. No se puede usar con patrones de acceso complicados (como uniones)

Resumen:

Considere HBase cuando carga datos por clave, busca datos por clave (o rango), sirve datos por clave, consulta datos por clave o cuando almacena datos por fila que no se ajustan bien a un esquema.

Echa un vistazo a Do's and Don't of HBase del Blog de cloudera .


¿Qué pasa con el uso de hbase como datalake para grandes cantidades de datos (archivos pequeños)? ¿puede manejar tantos datos como hdfs?
Mehdi TAZI

1
Si está produciendo muchos archivos pequeños, entonces, dependiendo del patrón de acceso, un tipo diferente de almacenamiento podría ser más apropiado. HBase almacena datos en MapFiles (SequenceFiles indexados), y es una buena opción si necesita hacer streaming de estilo MapReduce análisis con la búsqueda aleatoria ocasional
Ravindra babu

4

Hadoop utiliza un sistema de archivos distribuido, es decir, HDFS para almacenar bigdata. Pero existen ciertas limitaciones de HDFS e Inorder para superar estas limitaciones, surgieron bases de datos NoSQL como HBase, Cassandra y Mongodb.

Hadoop solo puede realizar el procesamiento por lotes y solo se podrá acceder a los datos de forma secuencial. Eso significa que uno tiene que buscar en todo el conjunto de datos incluso para los trabajos más simples. Un conjunto de datos enorme cuando se procesa da como resultado otro conjunto de datos enorme, que también debe procesarse secuencialmente. En este punto, se necesita una nueva solución para acceder a cualquier punto de datos en una sola unidad de tiempo (acceso aleatorio).

Al igual que todos los demás FileSystems, HDFS nos proporciona almacenamiento, pero de manera tolerante a fallas con un alto rendimiento y un menor riesgo de pérdida de datos (debido a la replicación). Sin embargo, al ser un Sistema de archivos, HDFS carece de acceso aleatorio de lectura y escritura. Aquí es donde HBase entra en escena. Es un almacén distribuido, escalable y de grandes datos, modelado a partir de la BigTable de Google. Cassandra es algo similar a hbase.


4

Tanto HBase como HDFS en una imagen

Tanto HBase como HDFS en una imagen

Nota:

Verifique que los demonios HDFS (resaltados en verde) como DataNode (Servidores de región colocados) y NameNode en el clúster tengan HBase y Hadoop HDFS

HDFS es un sistema de archivos distribuido que es muy adecuado para el almacenamiento de archivos grandes. que no proporciona búsquedas rápidas de registros individuales en archivos.

HBase , por otro lado, está construido sobre HDFS y proporciona búsquedas rápidas de registros (y actualizaciones) para tablas grandes. Esto a veces puede ser un punto de confusión conceptual. HBase coloca internamente sus datos en "StoreFiles" indexados que existen en HDFS para búsquedas de alta velocidad.

¿Cómo se ve esto?

Bueno, a nivel de infraestructura, cada máquina salve en el clúster tiene demonios siguientes

  • Servidor de región - HBase
  • Nodo de datos - HDFS

Máquina esclava

¿Cómo es rápido con las búsquedas?

HBase logra búsquedas rápidas en HDFS (a veces también en otros sistemas de archivos distribuidos) como almacenamiento subyacente, utilizando el siguiente modelo de datos

  • Mesa

    • Una tabla HBase consta de varias filas.
  • Fila

    • Una fila en HBase consta de una clave de fila y una o más columnas con valores asociados a ellas. Las filas se ordenan alfabéticamente por la tecla de fila a medida que se almacenan. Por esta razón, el diseño de la clave de fila es muy importante. El objetivo es almacenar datos de tal manera que las filas relacionadas estén cerca unas de otras. Un patrón de clave de fila común es un dominio de sitio web. Si sus claves de fila son dominios, probablemente debería almacenarlas al revés (org.apache.www, org.apache.mail, org.apache.jira). De esta manera, todos los dominios de Apache están cerca uno del otro en la tabla, en lugar de extenderse según la primera letra del subdominio.
  • Columna

    • Una columna en HBase consta de una familia de columnas y un calificador de columna, que están delimitados por un carácter: (dos puntos).
  • Familia de columnas

    • Las familias de columnas colocan físicamente un conjunto de columnas y sus valores, a menudo por razones de rendimiento. Cada familia de columnas tiene un conjunto de propiedades de almacenamiento, como si sus valores deben almacenarse en la memoria caché, cómo se comprimen sus datos o cómo se codifican sus claves de fila, y otros. Cada fila de una tabla tiene las mismas familias de columnas, aunque es posible que una fila dada no almacene nada en una familia de columnas dada.
  • Calificador de columna

    • Se agrega un calificador de columna a una familia de columnas para proporcionar el índice de un dato dado. Dado el contenido de una familia de columnas, un calificador de columna podría ser content: html y otro podría ser content: pdf. Aunque las familias de columnas se arreglan en la creación de la tabla, los calificadores de columna son mutables y pueden diferir mucho entre filas.
  • Célula

    • Una celda es una combinación de la fila, la familia de columnas y el calificador de columna, y contiene un valor y una marca de tiempo, que representa la versión del valor.
  • Marca de tiempo

    • Se escribe una marca de tiempo junto a cada valor y es el identificador de una versión dada de un valor. De manera predeterminada, la marca de tiempo representa el tiempo en el Servidor de Región cuando se escribieron los datos, pero puede especificar un valor de marca de tiempo diferente cuando coloca datos en la celda.

Flujo de solicitud de lectura del cliente:

Flujo de solicitud de lectura del cliente

¿Cuál es la metatabla en la imagen de arriba?

metatabla

Después de toda la información, el flujo de lectura de HBase es para búsquedas que tocan estas entidades

  1. Primero, el escáner busca las celdas de fila en el caché de bloques: el caché de lectura. Los valores clave recientemente leídos se almacenan en caché aquí, y los menos utilizados recientemente se expulsan cuando se necesita memoria.
  2. A continuación, el escáner busca en el MemStore , el caché de escritura en la memoria que contiene las escrituras más recientes.
  3. Si el escáner no encuentra todas las celdas de fila en MemStore y Block Cache, entonces HBase usará los índices de Block Cache y los filtros de floración para cargar HFiles en la memoria, que puede contener las celdas de fila de destino.

fuentes y más información:

  1. Modelo de datos de HBase
  2. HBase architecute

1

Referencia: http://www.quora.com/What-is-the-difference-between-HBASE-and-HDFS-in-Hadoop

Hadoop es un nombre general para varios subsistemas: 1) HDFS. Un sistema de archivos distribuido que distribuye datos a través de un grupo de máquinas que se encarga de la redundancia, etc. 2) Map Reduce. Un sistema de administración de trabajos sobre HDFS: para administrar trabajos de reducción de mapas (y otros tipos) que procesan los datos almacenados en HDFS.

Básicamente significa que es un sistema fuera de línea: almacena datos en HDFS y puede procesarlos ejecutando trabajos.

HBase por otro lado en una base de datos basada en columnas. Utiliza HDFS como almacenamiento, que se encarga de la copia de seguridad \ redundancia \ etc., pero es una "tienda en línea", lo que significa que puede consultar por filas / filas específicas, etc. y obtener un valor inmediato.


0

HDFS es un sistema de archivos distribuido basado en Java que le permite almacenar grandes datos en múltiples nodos en un clúster Hadoop. Mientras que HBase es una base de datos NoSQL (similar a NTFS y MySQL).

Tanto HDFS como HBase almacenan todo tipo de datos, como estructurados, semiestructurados y no estructurados en un entorno distribuido.

Diferencias entre HDFS y HBase

  • HBase proporciona acceso de baja latencia a pequeñas cantidades de datos dentro de grandes conjuntos de datos, mientras que HDFS proporciona operaciones de alta latencia.
  • HBase admite lecturas y escrituras aleatorias, mientras que HDFS admite WORM (escribir una vez, leer muchas o varias veces).
  • Se accede a HDFS básicamente o principalmente a través de trabajos de MapReduce, mientras que a HBase se accede a través de comandos de shell, Java API, REST, Avro o Thrift API.

HDFS almacena grandes conjuntos de datos en un entorno distribuido y aprovecha el procesamiento por lotes de esos datos.

Mientras que HBase almacena datos de una manera orientada a columnas, donde cada columna se almacena de manera conjunta, de modo que la lectura se vuelve más rápida y se aprovecha el procesamiento en tiempo real.

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.