2011-12-19 24 views

risposta

13

Più file non vengono memorizzati in un unico blocco. A proposito, un singolo file può essere memorizzato in più blocchi. La mappatura tra il file e gli id ​​di blocco è persistente nel NameNode.

Secondo la Hadoop : The Definitive Guide

differenza di un file system per un singolo disco, un file in HDFS che è minore di un unico blocco non occupa valore di un blocco pieno di storage sottostante.

HDFS è progettato per gestire file di grandi dimensioni. Se ci sono troppi file piccoli, il NameNode potrebbe essere caricato poiché memorizza lo spazio dei nomi per HDFS. Controlla questo article su come alleviare il problema con troppi file di piccole dimensioni.

+0

Sai come trovare i mapping dei blocchi ai file? 'hadoop fsck/-files -blocks -locations -racks' fornisce il file alla mappatura dei blocchi ma non dice in quale directory sul filesystem reale si trova il blocco (cioè è nella sottodirectory9 o nella sottodirectory61). – Eugen

+0

La proprietà 'dfs.datanode.data.dir' determina dove sul filesystem locale un nodo dati DFS dovrebbe memorizzare i suoi blocchi. Se questo è un elenco di directory delimitato da virgole, i dati verranno archiviati in tutte le directory con nome, in genere su dispositivi diversi. Le directory che non esistono vengono ignorate. –

+0

No, intendevo quando i blocchi fisici sono archiviati, potrebbero essere memorizzati in 'dfs.datanode.data.dir' o in sottodirectory in quella directory (creata dal Datanode). C'è un modo per trovare quale blocco è memorizzato dove (come un file di livello superiore o all'interno di qualche sottodirectory)? – Eugen

3

Bene, è possibile farlo utilizzando il filesystem HAR (Hadoop Archive) che tenta di comprimere più file di piccole dimensioni nel blocco HDFS del file di parti speciali gestito dal filesystem HAR.

3

Un blocco memorizzerà un singolo file. Se il file è più grande di BlockSize (64/128/..), verrà partizionato in più blocchi con rispettivi BlockSize.

0

La necessità punto principale di comprendere in HDFS, file is partioned into blocks based on size e non che ci saranno alcuni blocchi di memoria, in cui sono memorizzati file (questo è equivoco)

Fondamentalmente più file non sono memorizzati in un unico blocco (a meno che non si tratti di file Archive o Har).

2

La dimensione del blocco Hadoop è Hadoop Storage Concept. Ogni volta Quando si archivia un file in Hadoop, questo verrà suddiviso nelle dimensioni dei blocchi e, in base al fattore di replicazione e alla località dei dati, sarà distribuito sul cluster.

Per Dettagli:

  • Quando si preme un file a HDFS, esso sarà diviso in blocchi. Ogni blocco è come un singolo file con una dimensione massima come descritto dalla dimensione del blocco.

  • Ogni blocco conterrà un file .meta insieme ad esso, per memorizzare le informazioni sui metadati del blocco su Hadoop.

  • Se il file è molto piccolo, l'intero file sarà in un blocco e il blocco (un file di archiviazione) avrà le stesse dimensioni del file e un Meta File.

alcuni comandi:

  • collegarsi a qualsiasi nodo di dati nel cluster [se si ha accesso;)]. Quindi vai alle directory di archiviazione per quel nodo e puoi vedere i blocchi effettivi memorizzati sul nodo dati come di seguito.

(Dir di sono come per il mio gruppo -/data2/dfs/dn /):

Dimensione blocco: 1 GB

cd/dati/DFS/dn -> corrente -> finalizzato -> subDir0 -> (qui è l'oro)

Block utilizzato solo KB di memoria per i file di piccole dimensioni o potrebbe essere, quando la dimensione del file è la mia dimensione del blocco + di qualche KB

-rw-r - r-- 1 HDFS HDFS 91K 13 Settembre 16:19 blk_1073781504

-rw-r - r-- 1 HDFS HDFS 19K 13 Settembre 16:21 blk_1073781504_40923.meta

Quando il file è più grande, allora la dimensione del blocco del blocco sarà simile a qualcosa, come di seguito

-rw-r - r-- 1 HDFS HDFS 1.0G 31 Agosto 00:03 blk_1073753814

-rw -r - r-- 1 hdfs hdfs 8.1M Aug 31 12:04 blk_1073753814_12994.meta

Spero che spiegherà il materiale di archiviazione del blocco. Se si vuole conoscere il dettaglio come i file vengono memorizzati in blocchi quindi eseguire

HDFS -blocks fsck -Locations

Fatemi sapere se ho perso qualcosa qui.