Différence entre HBase et Hadoop/HDFS
C'est une question un peu naïve mais je suis nouveau dans le paradigme NoSQL et je n'en sais pas grand-chose. Donc, si quelqu'un peut m'aider à comprendre clairement la différence entre HBase et Hadoop ou si donner des conseils qui pourraient m'aider à comprendre la différence.
Jusqu'à présent, j'ai fait quelques recherches et acc. à ma connaissance, Hadoop fournit un cadre pour travailler avec un morceau brut de données(fichiers) dans HDFS et HBase est un moteur de base de données au-dessus de Hadoop, qui fonctionne essentiellement avec des données structurées au lieu de données brutes morceau. Hbase fournit une couche logique sur HDFS tout comme SQL. Est-il correct?
Pls n'hésitez pas à me corriger.
Merci.
5 réponses
Hadoop est essentiellement 3 choses, un FS (Hadoop Distributed File System), un framework de calcul (MapReduce) et un pont de gestion (encore un autre négociateur de ressources). HDFS vous permet de stocker d'énormes quantités de données de manière distribuée (fournit un accès en lecture/écriture plus rapide) et redondante (offre une meilleure disponibilité). Et MapReduce vous permet de traiter ces énormes données de manière distribuée et parallèle. Mais MapReduce ne se limite pas à HDFS. Étant un FS, HDFS manque de lecture/écriture aléatoire capacité. Il est bon pour l'accès aux données séquentielles. Et C'est là que HBase entre en scène. C'est une base de données NoSQL qui s'exécute sur votre cluster Hadoop et vous offre un accès aléatoire en lecture/écriture en temps réel à vos données.
Vous pouvez stocker des données structurées et non structurées dans Hadoop et HBase. Les deux vous fournissent plusieurs mécanismes pour accéder aux données, comme le shell et d'autres API. De plus, HBase stocke les données sous forme de paires clé/valeur de manière colonnaire tandis que HDFS stocke les données que les fichiers plats. Certaines des principales caractéristiques des deux systèmes sont:
Hadoop
- optimisé pour l'accès en streaming de fichiers volumineux.
- suit écrire-une fois lu-beaucoup idéologie.
- ne prend pas en charge la lecture/écriture aléatoire.
HBase
- stocke les paires clé / valeur en colonnes (les colonnes sont regroupées en familles de colonnes).
- fournit un accès à faible latence à de petites quantités de données à partir d'une grande quantité de données définir.
- fournit un modèle de données flexible.
Hadoop est le plus adapté pour le traitement par lots hors ligne, alors que HBase est utilisé lorsque vous avez des besoins en temps réel.
Une comparaison analogue serait entre MySQL et Ext4.
Apache Hadoop le projet comprend quatre modules clés
- Hadoop Common : les utilitaires communs qui prennent en charge les autres modules Hadoop.
- Hadoop Distributed File System (HDFS™) : un système de fichiers distribué qui fournit un accès à haut débit aux données d'application.
- Hadoop YARN : un cadre pour la planification des tâches et la gestion des ressources de cluster.
- Hadoop MapReduce : un système basé surYARN pour parallèle le traitement de grands ensembles de données.
HBase est une base de données distribuée évolutive qui prend en charge le stockage de données structuré pour les grandes tables. Tout comme Bigtable
exploite le stockage de données distribué fourni par le système de fichiers Google, Apache HBase fournit des capacités de type Bigtable au-dessus de Hadoop et HDFS.
Quand utiliser HBase:
- Si votre application a un schéma variable où chaque ligne est légèrement différente
- Si vous trouvez que vos données sont stockées dans des collections, qui sont toutes saisies sur la même valeur
- Si vous avez besoin aléatoire, en temps réel lire/écrire accès à votre Big Data.
- Si vous avez besoin d'un accès basé sur une clé aux données lors du stockage ou de la récupération.
- Si vous avez une énorme quantité de données avec le cluster Hadoop existant
Mais HBase a quelques limitations
- il ne peut pas être utilisé pour les applications transactionnelles classiques ou même l'analyse relationnelle.
- ce n'est pas non plus un substitut complet pour HDFS lors de la réalisation de MapReduce par lots volumineux.
- il ne parle pas SQL, n'a pas d'optimiseur, ne supporte pas les transactions d'enregistrements croisés ou les jointures.
- il ne peut pas être utilisé avec des modèles d'accès compliqués (tels que les jointures)
Résumé:
Considérez HBase lorsque vous chargez des données par clé, recherchez des données par clé (ou plage), servez des données par clé, interrogez des données par clé ou stockez des données par ligne qui ne sont pas bien conformes à un schéma.
Jetez un oeil à faire et ne pas de HBase de Cloudera blog.
Hadoop utilise le système de fichiers distribué, C'est-à-dire HDFS pour stocker bigdata.Mais il y a certaines limites de HDFS et afin de surmonter ces limitations, les bases de données NoSQL telles que HBase, Cassandra et Mongodb sont apparues.
Hadoop ne peut effectuer que le traitement par lots, et les données ne seront accessibles que de manière séquentielle. Cela signifie qu'il faut rechercher l'ensemble de données entier, même pour les tâches les plus simples.Un énorme ensemble de données lorsqu'il est traité entraîne un autre énorme ensemble de données, qui devrait également être traitées séquentiellement. À ce stade, une nouvelle solution est nécessaire pour accéder à n'importe quel point de données dans une seule unité de temps (accès aléatoire).
Comme tous les autres systèmes de fichiers, HDFS nous fournit du stockage, mais de manière tolérante aux pannes avec un débit élevé et un risque moindre de perte de données(en raison de la réplication).Mais, étant un système de fichiers , HDFS manque d'accès aléatoire en lecture et en écriture. C'est là que HBase entre en scène. C'est un magasin de données distribué, évolutif et volumineux, calqué sur le BigTable de Google. Cassandra est un peu similaire à hbase.
HBase et HDFS dans une image
Remarque:
Vérifiez les démons HDFS (surlignés en vert) comme DataNode (serveurs de Région co-localisés) et NameNode dans le cluster avec HBase et Hadoop HDFS
HDFS est un système de fichiers distribué, qui est bien adaptée pour le stockage de fichiers volumineux. qui ne fournit pas de recherches d'enregistrements individuels rapides dans les fichiers.
HBase, sur la d'autre part, est construit sur HDFS et fournit des recherches d'enregistrement rapides (et mises à jour) pour les grandes tables. Cela peut parfois être un point de confusion conceptuelle. HBase place vos données en interne dans des "StoreFiles" indexés qui existent sur HDFS pour des recherches à grande vitesse.
Comment cela ressemble-t-il?
Eh bien, au niveau de l'infrastructure, chaque machine salve en cluster a des démons suivants
- Serveur De Région-HBase
- Noeud De Données - HDFS
Comment est-ce rapide avec les recherches?
HBase réalise des recherches rapides sur HDFS (parfois d'autres systèmes de fichiers distribués également) en tant que stockage sous-jacent, en utilisant le modèle de données suivant
-
Tableau
- une table HBase se compose de plusieurs lignes.
-
Ligne
- une ligne dans HBase se compose d'une clé de ligne et d'une ou plusieurs colonnes avec des valeurs qui leur sont associées. Les lignes sont triées alphabétiquement par la clé de ligne telle qu'elle est stockée. Pour cette raison, la conception de la clé de ligne est très importante. L'objectif est de stocker les données de telle sorte que les lignes associées soient proches les unes des autres. Un modèle de clé de ligne commun est un domaine de site web. Si vos clés de ligne sont des domaines, vous devriez probablement les stocker en reverse (org.Apache.www, org.Apache.mail, org.Apache.jira). De cette façon, tous les domaines Apache sont proches les uns des autres dans la table, plutôt que d'être répartis sur la base de la première lettre du sous-domaine.
-
Colonne
- une colonne dans HBase se compose d'une famille de colonnes et d'un qualificatif de colonne, qui sont délimités par un caractère : (deux-points).
-
Famille De Colonnes
- les familles de colonnes colocalisent physiquement un ensemble de colonnes et leurs valeurs, souvent pour des raisons de performance. Chaque famille de colonnes possède un ensemble de propriétés de stockage, telles que si ses valeurs doivent être mises en cache en mémoire, Comment ses données sont compressées ou sa ligne les touches sont codés, et d'autres. Chaque ligne d'une table a les mêmes familles de colonnes, bien qu'une ligne donnée puisse ne rien stocker dans une famille de colonnes donnée.
-
Qualificateur De Colonne
- un qualificatif de colonne est ajouté à une famille de colonnes pour fournir l'index d'une donnée donnée. Étant donné le contenu d'une famille de colonnes, un qualificatif de colonne peut être content:html, et un autre peut être content: pdf. Bien que les familles de colonnes soient fixées lors de la création de la table, les qualificatifs de colonne sont mutable et peut différer considérablement entre les lignes.
-
Cellule
- une cellule est une combinaison de ligne, de famille de colonnes et de qualificateur de colonne, et contient une valeur et un horodatage, qui représente la version de la valeur.
-
Horodatage
- un horodatage est écrit à côté de chaque valeur, et est l'identifiant d'une version donnée d'une valeur. Par défaut, l'horodatage représente l'heure sur le RegionServer lorsque les données ont été écrites, mais vous pouvez spécifier une valeur d'horodatage différente lorsque vous mettez des données dans la cellule.
Flux de demande de lecture du Client:
Qu'est-ce que meta table dans l'image ci-dessus?
Après toutes les informations, HBase read flow est pour la recherche touche ces entités
- Tout d'abord, le scanner recherche les cellules de ligne dans le cache de bloc - le cache de lecture. Récemment Clé De Lecture Les valeurs sont mises en cache ici, et les moins récemment utilisées sont expulsées lorsque la mémoire est nécessaire.
- Ensuite, le scanner regarde dans le MemStore, le cache d'écriture de la mémoire contenant les plus récentes écrit.
- si le scanner ne trouve pas toutes les cellules de ligne dans le Memstore et le Cache de blocs, HBase utilisera les index de Cache de blocs et les filtres bloom pour charger HFiles en mémoire, qui peuvent contenir les cellules de ligne cibles.
Sources et plus d'Informations:
Référence: http://www.quora.com/What-is-the-difference-between-HBASE-and-HDFS-in-Hadoop
Hadoop est un nom général pour plusieurs sous-systèmes: 1) HDFS. Un système de fichiers distribué qui distribue des données sur un cluster de machines en prenant soin de la redondance etc. 2) Carte Réduire. Un système de gestion des tâches au-dessus de HDFS-pour gérer les tâches Map-reduce (et d'autres types) traitant les données stockées sur HDFS.
Fondamentalement, cela signifie que c'est un système hors ligne - vous stockez des données sur HDFS et vous pouvez le traiter en exécutant des travaux.
HBase d'autre part dans une base de données basée sur des colonnes. Il utilise HDFS comme stockage-qui prend soin de backup \ redundency \ etc mais c'est un "magasin en ligne" - ce qui signifie que vous pouvez l'interroger pour une ligne spécifique\rows etc et obtenir une valeur immédiate.