2014-07-11 12 views
14

qualsiasi file system dovrebbe fornire un'API per accedere ai file e directory, eccCosa si intende per "HDFS non ha accesso casuale in lettura e scrittura"?

Quindi, cosa si intende per "HDFS manca lettura casuale e scrittura"?

Quindi, dovremmo usare HBase.

+0

Downvote come "questa domanda non mostra alcuno sforzo di ricerca". Dai uno sguardo [a questa domanda] (http://stackoverflow.com/questions/16929832/difference-between-hbase-and-hadoop), e fai qualche ricerca sull'accesso in sequenza/lettura sequenziale per quanto riguarda queste tecnologie. – admdrew

+2

Dopo aver letto quella risposta, avrei esattamente questa domanda :). –

risposta

18

La dimensione del blocco HDFS predefinito è 64 MB. Quindi non puoi leggere una riga qui, una riga lì. Si leggono e scrivono sempre blocchi da 64 MB. Questo va bene quando si desidera elaborare l'intero file. Ma rende HDFS inadatto per alcune applicazioni, come nel caso in cui si desideri utilizzare un indice per cercare piccoli record.

HBase d'altra parte è ottimo per questo. Se si desidera leggere un piccolo record, si leggerà solo quel piccolo record.

HBase utilizza HDFS come supporto. Quindi, come fornisce un accesso efficiente basato sui record?

HBase carica le tabelle da HDFS alla memoria o al disco locale, quindi la maggior parte delle letture non viene eseguita su HDFS. Le mutazioni vengono memorizzate prima in un diario di sola aggiunta. Quando il journal diventa grande, è incorporato in una tabella "addendum". Quando ci sono troppe tabelle addendum, vengono tutte ridotte in una tabella primaria nuova di zecca. Per le letture, prima viene consultato il journal, poi le tabelle addendum e infine la tabella primaria. Questo sistema significa che scriviamo solo un blocco HDFS completo quando abbiamo un valore completo di modifiche di un blocco HDFS.

Una descrizione più approfondita di questo approccio è nello Bigtable whitepaper.

+0

Ma hbase usa anche HDFS. quindi, in realtà non può ancora risolvere questa limitazione. – lovespring

+0

Buon punto. Non sono un esperto, ma ho aggiunto una descrizione di come ho capito che HBase risolve questo problema. –

1

In un database tipico in cui i dati vengono archiviati in tabelle in formato RDBMS è possibile leggere o scrivere su qualsiasi record da qualsiasi tabella senza dover sapere cosa c'è in altri record. Questo è chiamato scrittura/lettura casuale.

Tuttavia, nei dati HDFS i dati vengono memorizzati nel formato file (generalmente) anziché in formato tabella. Quindi se stai leggendo/scrivendo non è così facile come in RDBMS.