Differenza tra HBase e Hadoop / HDFS


130

Questa è una specie di domanda ingenua, ma sono nuovo nel paradigma NoSQL e non ne so molto. Quindi, se qualcuno può aiutarmi a capire chiaramente la differenza tra HBase e Hadoop o se dare alcuni suggerimenti che potrebbero aiutarmi a capire la differenza.

Fino ad ora, ho fatto qualche ricerca e acc. per quanto ho capito, Hadoop fornisce un framework per lavorare con blocchi di dati grezzi (file) in HDFS e HBase è un motore di database sopra Hadoop, che fondamentalmente funziona con dati strutturati anziché con blocchi di dati grezzi. Hbase fornisce un livello logico su HDFS proprio come fa SQL. È corretto?

Non esitate a correggermi.

Grazie.


7
Forse il titolo della domanda dovrebbe essere "Differenza tra HBase e HDFS" allora?
Matt Ball,

Risposte:


248

Hadoop è fondamentalmente 3 cose, un FS (Hadoop Distributed File System), un framework di calcolo (MapReduce) e un bridge di gestione (Yet Another Resource Negotiator). HDFS consente di archiviare enormi quantità di dati in modo distribuito (fornisce un accesso in lettura / scrittura più veloce) e ridondante (offre una migliore disponibilità). E MapReduce ti consente di elaborare questi enormi dati in modo distribuito e parallelo. Ma MapReduce non si limita al solo HDFS. Essendo un FS, HDFS manca della capacità di lettura / scrittura casuale. È buono per l'accesso sequenziale ai dati. Ed è qui che HBase entra in scena. Si tratta di un database NoSQL che viene eseguito in cima al cluster Hadoop e offre accesso casuale in tempo reale in lettura / scrittura ai dati.

Puoi archiviare sia i dati strutturati che quelli non strutturati in Hadoop e HBase. Entrambi forniscono più meccanismi per accedere ai dati, come la shell e altre API. Inoltre, HBase memorizza i dati come coppie chiave / valore in modo colonnare mentre HDFS archivia i dati come file flat. Alcune delle caratteristiche salienti di entrambi i sistemi sono:

Hadoop

  1. Ottimizzato per l'accesso in streaming di file di grandi dimensioni.
  2. Segue l'ideologia write-once read-many.
  3. Non supporta la lettura / scrittura casuale.

HBase

  1. Memorizza le coppie chiave / valore in modo colonnare (le colonne vengono raggruppate insieme come famiglie di colonne).
  2. Fornisce accesso a bassa latenza a piccole quantità di dati da un set di dati di grandi dimensioni.
  3. Fornisce un modello di dati flessibile.

Hadoop è più adatto per roba offline di elaborazione batch mentre HBase viene utilizzato quando hai esigenze in tempo reale.

Un analogo confronto sarebbe tra MySQL ed Ext4.


che dire di usare hbase come datalake per grandi quantità di dati (piccoli file)? può gestire tanti dati quanti sono gli hdf?
Mehdi TAZI,

@MehdiTAZI sicuramente. HBase funziona su HDFS, quindi non devi preoccuparti della scalabilità. devi solo assicurarti di utilizzare HBase come dovrebbe essere usato per ottenere le massime prestazioni
Tariq

per quanto riguarda le questioni operative?
Mehdi TAZI,

Non direi che HBase è l'incubo del team operativo, ma ha alcune aree in cui c'è ancora qualche possibilità di miglioramento e la comunità sta lavorando molto duramente per risolvere il problema. Ma questo è vero per qualsiasi software. Non esiste alcun strumento / tecnologia a prova di problemi IMHO. Se si adatta alle tue esigenze, dovresti assolutamente provarlo. È uno strumento di labirinto per gestire le tue esigenze di lettura / scrittura in tempo reale casuali.
Tariq,

22

Il progetto Apache Hadoop include quattro moduli chiave

  1. Hadoop Common : le utility comuni che supportano gli altri moduli Hadoop.
  2. Hadoop Distributed File System (HDFS ™) : un file system distribuito che fornisce un accesso ad alta velocità ai dati dell'applicazione.
  3. Hadoop YARN : un framework per la pianificazione dei lavori e la gestione delle risorse del cluster.
  4. Hadoop MapReduce : un sistema basato su YARN per l'elaborazione parallela di grandi set di dati.

HBase è un database distribuito scalabile che supporta l'archiviazione di dati strutturati per tabelle di grandi dimensioni. Proprio come Bigtablesfrutta l'archiviazione dei dati distribuiti fornita dal file system di Google, Apache HBase offre funzionalità simili a Bigtable oltre a Hadoop e HDFS.

Quando usare HBase:

  1. Se l'applicazione ha uno schema variabile in cui ogni riga è leggermente diversa
  2. Se scopri che i tuoi dati sono archiviati in raccolte, è tutto con chiave sullo stesso valore
  3. Se hai bisogno di un accesso casuale e in tempo reale in lettura / scrittura ai tuoi Big Data.
  4. Se è necessario un accesso basato su chiave ai dati durante l'archiviazione o il recupero.
  5. Se disponi di enormi quantità di dati con il cluster Hadoop esistente

Ma HBase ha alcune limitazioni

  1. Non può essere utilizzato per le classiche applicazioni transazionali o anche per l'analisi relazionale.
  2. Inoltre, non sostituisce completamente HDFS quando si esegue MapReduce in batch di grandi dimensioni.
  3. Non parla di SQL, non ha un ottimizzatore, non supporta transazioni incrociate o join.
  4. Non può essere utilizzato con schemi di accesso complicati (come i join)

Sommario:

Considerare HBase quando si caricano dati per chiave, si cercano dati per chiave (o intervallo), si forniscono dati per chiave, si eseguono query su dati per chiave o quando si memorizzano dati per riga che non si conformano bene a uno schema.

Dai un'occhiata a Do's e Don't of HBase dal blog di cloudera .


che dire di usare hbase come datalake per grandi quantità di dati (piccoli file)? può gestire tanti dati quanti sono gli hdf?
Mehdi TAZI,

1
Se stai producendo molti file di piccole dimensioni, quindi, a seconda del modello di accesso, potrebbe essere più appropriato un diverso tipo di archiviazione. Base memorizza i dati in MapFiles (SequenceFiles indicizzati) ed è una buona scelta se devi eseguire lo streaming in stile MapReduce analizza con l'occasionale ricerca casuale
Ravindra babu,

4

Hadoop utilizza file system distribuito, ad esempio HDFS, per l'archiviazione di bigdata, ma esistono alcune limitazioni di HDFS e Inorder per superare queste limitazioni, sono nati database NoSQL come HBase, Cassandra e Mongodb.

Hadoop può eseguire solo l'elaborazione in batch e i dati saranno accessibili solo in modo sequenziale. Ciò significa che si deve cercare nell'intero set di dati anche per i lavori più semplici. Un enorme set di dati quando elaborato risulta in un altro enorme set di dati, che dovrebbe anche essere elaborato in sequenza. A questo punto, è necessaria una nuova soluzione per accedere a qualsiasi punto di dati in una singola unità di tempo (accesso casuale).

Come tutti gli altri file system, HDFS ci fornisce spazio di archiviazione, ma in modo tollerante ai guasti con un throughput elevato e un minor rischio di perdita di dati (a causa della replica). Ma essendo un file system, HDFS non ha accesso casuale in lettura e scrittura. Questo è dove HBase viene in scena. È un archivio di grandi quantità di dati distribuito, scalabile, modellato sulla BigTable di Google. Cassandra è in qualche modo simile a hbase.


4

Sia HBase che HDFS in un'unica immagine

Sia HBase che HDFS in un'unica immagine

Nota:

Controlla i demoni HDFS (evidenziati in verde) come DataNode (posizionated Region Servers) e NameNode nel cluster con entrambi HBase e Hadoop HDFS

HDFS è un file system distribuito adatto per la memorizzazione di file di grandi dimensioni. che non fornisce ricerche rapide nei singoli record.

HBase , d'altra parte, è basato su HDFS e fornisce ricerche (e aggiornamenti) record veloci per tabelle di grandi dimensioni. Questo a volte può essere un punto di confusione concettuale. HBase inserisce internamente i tuoi dati in "StoreFile" indicizzati esistenti su HDFS per ricerche ad alta velocità.

Che aspetto ha?

Bene, a livello di infrastruttura, ogni macchina salve nel cluster ha i seguenti demoni

  • Region Server - HBase
  • Nodo dati - HDFS

Macchina schiava

Com'è veloce con le ricerche?

HBase realizza ricerche veloci su HDFS (a volte anche altri file system distribuiti) come memoria sottostante, utilizzando il seguente modello di dati

  • tavolo

    • Una tabella HBase è composta da più righe.
  • Riga

    • Una riga in HBase è composta da una chiave di riga e una o più colonne con valori associati. Le righe vengono ordinate alfabeticamente in base alla chiave di riga man mano che vengono memorizzate. Per questo motivo, il design della chiave di riga è molto importante. L'obiettivo è archiviare i dati in modo tale che le righe correlate siano vicine l'una all'altra. Un modello di chiave di riga comune è un dominio del sito Web. Se le chiavi della tua riga sono domini, probabilmente dovresti memorizzarle al contrario (org.apache.www, org.apache.mail, org.apache.jira). In questo modo, tutti i domini Apache sono vicini l'uno all'altro nella tabella, anziché essere distribuiti in base alla prima lettera del sottodominio.
  • Colonna

    • Una colonna in HBase è composta da una famiglia di colonne e da un qualificatore di colonna, che sono delimitati da un carattere: (due punti).
  • Famiglia di colonne

    • Le famiglie di colonne raggruppano fisicamente un insieme di colonne e i loro valori, spesso per motivi di prestazioni. Ogni famiglia di colonne ha una serie di proprietà di archiviazione, ad esempio se i suoi valori devono essere memorizzati nella cache, in che modo i suoi dati vengono compressi o le sue chiavi di riga vengono codificate e altri. Ogni riga in una tabella ha le stesse famiglie di colonne, anche se una determinata riga potrebbe non memorizzare nulla in una determinata famiglia di colonne.
  • Qualificatore di colonna

    • Un qualificatore di colonna viene aggiunto a una famiglia di colonne per fornire l'indice per un dato dato. Dato il contenuto di una famiglia di colonne, un qualificatore di colonna potrebbe essere contenuto: html e un altro potrebbe essere contenuto: pdf. Sebbene le famiglie di colonne siano fisse alla creazione della tabella, i qualificatori di colonna sono modificabili e possono differire notevolmente tra le righe.
  • Cellula

    • Una cella è una combinazione di riga, famiglia di colonne e qualificatore di colonna e contiene un valore e un timestamp, che rappresenta la versione del valore.
  • timestamp

    • Un timestamp è scritto accanto a ciascun valore ed è l'identificatore per una determinata versione di un valore. Per impostazione predefinita, il timestamp rappresenta l'ora sul RegionServer in cui sono stati scritti i dati, ma è possibile specificare un valore di timestamp diverso quando si inseriscono i dati nella cella.

Flusso richiesta lettura client:

Flusso di richiesta di lettura client

Qual è la meta tabella nella figura sopra?

meta tabella

Dopo tutte le informazioni, il flusso di lettura HBase è per la ricerca tocca queste entità

  1. Innanzitutto, lo scanner cerca le celle Row nella cache di blocco: la cache di lettura. I valori chiave letti di recente vengono memorizzati nella cache qui e i meno utilizzati di recente vengono eliminati quando è necessaria memoria.
  2. Successivamente, lo scanner cerca nel MemStore , la cache di scrittura in memoria contenente le scritture più recenti.
  3. Se lo scanner non trova tutte le celle di riga in MemStore e Block Cache, HBase utilizzerà gli indici Block Cache e i filtri di bloom per caricare HFile in memoria, che può contenere le celle di riga di destinazione.

fonti e maggiori informazioni:

  1. Modello di dati HBase
  2. HBase architecute

1

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

Hadoop è un nome generico per diversi sottosistemi: 1) HDFS. Un file system distribuito che distribuisce i dati attraverso un cluster di macchine che si occupano della ridondanza, ecc. 2) Riduzione della mappa. Un sistema di gestione dei lavori in aggiunta a HDFS - per gestire i lavori di riduzione della mappa (e altri tipi) che elaborano i dati memorizzati su HDFS.

Fondamentalmente significa che è un sistema offline: archiviate i dati su HDFS e potete elaborarli eseguendo lavori.

HBase invece in un database basato su colonne. Utilizza HDFS come memoria - che si occupa del backup \ ridondanza \ etc ma è un "negozio online" - il che significa che puoi interrogarlo per specifiche righe \ righe ecc. E ottenere un valore immediato.


0

HDFS è un file system distribuito basato su Java che consente di archiviare dati di grandi dimensioni su più nodi in un cluster Hadoop. Considerando che HBase è un database NoSQL (simile a NTFS e MySQL).

Poiché sia ​​HDFS che HBase memorizzano tutti i tipi di dati come strutturati, semi-strutturati e non strutturati in un ambiente distribuito.

Differenze tra HDFS e HBase

  • HBase offre accesso a bassa latenza a piccole quantità di dati all'interno di grandi set di dati, mentre HDFS offre operazioni ad alta latenza.
  • HBase supporta la lettura e la scrittura casuali mentre HDFS supporta WORM (Scrivi una volta Leggi più o più volte).
  • L'accesso a HDFS è fondamentalmente o principalmente tramite lavori MapReduce, mentre HBase è accessibile tramite comandi shell, API Java, REST, Avro o API Thrift.

HDFS archivia set di dati di grandi dimensioni in un ambiente distribuito e sfrutta l'elaborazione batch su tali dati.

Mentre HBase memorizza i dati in modo orientato alla colonna in cui ogni colonna è memorizzata insieme in modo che, la lettura diventa più veloce sfruttando l'elaborazione in tempo reale.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.