Nel post di oggi parliamo dell'architettura HBase. Ripassiamo le nostre basi di HBase prima di approfondire l'architettura di HBase.
serie di fibonacci di ricorsione in java
HBase - Le basi:
HBase è un archivio open source, NoSQL, distribuito, non relazionale, con versioni, multidimensionale e orientato alle colonne che è stato modellato su Google BigTable che gira su HDFS. 'NoSQL' è un termine ampio che significa che il database non è un RDBMS che supporta SQL come lingua di accesso principale, ma ci sono molti tipi di database NoSQL e Berkeley DB è un buon esempio di database NoSQL locale, mentre HBase lo è un database molto distribuito.
HBase fornisce tutte le funzionalità di Google BigTable. È iniziato come progetto di Powerset per elaborare enormi quantità di dati per la ricerca in linguaggio naturale. È stato sviluppato come parte del progetto Hadoop di Apache e funziona su HDFS (Hadoop Distributed File System). Fornisce metodi a tolleranza di errore per archiviare grandi quantità di dati sparsi. HBase è davvero più un 'Data Store' che 'Data Base' perché manca di molte delle funzionalità disponibili in RDBMS, come colonne tipizzate, indici secondari, trigger e linguaggi di query avanzati, ecc.
Nei database orientati alle colonne, la tabella dei dati viene archiviata come sezioni di colonne di dati anziché come righe di dati. Il modello di dati del database orientato alle colonne è costituito da nome tabella, chiave di riga, famiglia di colonne, colonne, timestamp. Durante la creazione di tabelle in HBase, le righe verranno identificate in modo univoco con l'aiuto di chiavi di riga e timestamp. In questo modello di dati la famiglia di colonne è statica mentre le colonne sono dinamiche. Ora esaminiamo l'architettura HBase.
Quando andare per HBase?
HBase è una buona opzione solo quando ci sono centinaia di milioni o miliardi di righe. HBase può anche essere utilizzato in alcuni punti quando si considera di passare da un RDBMS a HBase come riprogettazione completa anziché come port. In altre parole, HBase non è ottimizzato per le classiche applicazioni transazionali o anche per l'analisi relazionale. Inoltre, non è un sostituto completo di HDFS quando si esegue MapReduce in batch di grandi dimensioni. Allora perché dovresti scegliere HBase ?? Se la tua applicazione ha uno schema variabile in cui ogni riga è leggermente diversa, dovresti guardare HBase.
Architettura HBase:
La figura seguente spiega chiaramente l'architettura HBase.
In HBase, ci sono tre componenti principali: Master, server regionale e custode dello zoo . Gli altri componenti lo sono Memstore, HFile e WAL.
Poiché HBase viene eseguito su HDFS, utilizza l'architettura Master-Slave in cui HMaster sarà il nodo master e i server regionali sono i nodi slave. Quando il client invia una richiesta di scrittura, HMaster riceve tale richiesta e la inoltra al rispettivo server regionale.
Server regionale:
È un sistema che agisce in modo simile a un nodo dati. Quando il server regionale (RS) riceve la richiesta di scrittura, indirizza la richiesta alla regione specifica. Ogni regione memorizza un insieme di righe. I dati delle righe possono essere separati in più famiglie di colonne (CF). I dati di un particolare CF vengono memorizzati in HStore che consiste in Memstore e un set di HFile.
Cosa fa Memstore?
Memstore tiene traccia di tutti i log per le operazioni di lettura e scrittura che sono state eseguite all'interno di quella particolare regione server. Da ciò possiamo dire che agisce in modo simile a un nodo di nome in Hadoop. Memstore è un archivio in memoria, quindi Memstore utilizza l'archiviazione in memoria di ciascun nodo dati per archiviare i registri. Quando vengono soddisfatte determinate soglie, i dati di Memstore vengono scaricati in HFile.
famiglia colonna cassandra vs tavolo
Lo scopo principale dell'utilizzo di Memstore è la necessità di memorizzare i dati su DFS ordinati per chiave di riga. Poiché HDFS è progettato per letture / scritture sequenziali, senza che siano consentite modifiche ai file, HBase non può scrivere in modo efficiente i dati su disco mentre vengono ricevuti: i dati scritti non verranno ordinati (quando l'input non è ordinato), il che significa non ottimizzato per il futuro recupero. Per risolvere questo problema, HBase bufferizza gli ultimi dati ricevuti in memoria (in Memstore), li 'ordina' prima di scaricarli, quindi scrive su HDFS utilizzando scritture sequenziali veloci. Quindi, HFile contiene un elenco di righe ordinate.
Ogni volta che si verifica un flush di Memstore, viene creato un HFile per ogni CF e lavaggi frequenti possono creare tonnellate di HFile. Poiché durante la lettura HBase dovrà guardare molti HFile, la velocità di lettura può risentirne. Per impedire l'apertura di troppi HFile ed evitare il deterioramento delle prestazioni di lettura, viene utilizzato il processo di compattazione HFiles. HBase compatterà periodicamente (quando vengono soddisfatte determinate soglie configurabili) più HFile più piccoli in uno grande. Ovviamente, più file creati da Memstore vengono scaricati, più lavoro (carico extra) per il sistema. Inoltre, mentre il processo di compattazione viene solitamente eseguito in parallelo con il servizio di altre richieste e quando HBase non è in grado di tenere il passo con la compattazione di HFile (sì, ci sono soglie configurate anche per quello), bloccherà nuovamente le scritture su RS. Come abbiamo discusso sopra, questo è altamente indesiderabile.
Non possiamo essere sicuri che i dati rimarranno persistenti in Memstore. Supponiamo che un particolare codice dati sia inattivo. Quindi i dati che risiedono nella memoria di quel nodo dati andranno persi.
Per ovviare a questo problema, quando la richiesta arriva dal master, viene scritta anche su WAL. WAL non è altro che Scrivi registri anticipati che risiede su HDFS, un archivio permanente. Ora possiamo assicurarci che anche quando il nodo dati è inattivo i dati non andranno persi, ad es. abbiamo la copia di tutte le azioni che dovresti fare nel WAL. Quando il nodo dati è attivo, eseguirà nuovamente tutte le attività. Una volta completata l'operazione, tutto viene svuotato da Memstore e WAL e viene scritto in HFile in modo da essere sicuri che non stiamo esaurendo la memoria.
Facciamo un semplice esempio in cui voglio aggiungere la riga 10, quindi arriva la richiesta di scrittura, che dice che fornisce tutti i metadati a Memstore e WAL. Una volta che quella particolare riga è stata scritta in HFile, tutto in Memstore e WAL viene cancellato.
Custode dello zoo:
HBase viene integrato con Zoo keeper. Quando avvio HBase, viene avviata anche l'istanza di Zoo keeper. Il motivo è che il custode dello zoo ci aiuta a tenere traccia di tutti i server regionali disponibili per HBase. Il custode dello zoo tiene traccia di quanti server regionali ci sono, quali server regionali stanno tenendo da quale nodo dati a quale nodo dati. Tiene traccia di set di dati più piccoli in cui Hadoop sta perdendo. Riduce l'overhead su Hadoop che tiene traccia della maggior parte dei tuoi metadati. Quindi HMaster ottiene i dettagli dei server regionali contattando effettivamente lo Zoo keeper.
Hai domande per noi? Menzionateli nella sezione commenti e vi risponderemo.
system.exit (1) java
Post correlati: