hadoop
Cos'è l'HDFS?
Ricerca…
Osservazioni
Una buona spiegazione di HDFS e come funziona.
La sintassi dovrebbe contenere i comandi che possono essere utilizzati in HDFS.
HDFS - Hadoop Distributed File System
Hadoop Distributed File System (HDFS) è un file system basato su Java che fornisce un'archiviazione dei dati scalabile e affidabile progettata per estendersi su grandi cluster di server commodity. HDFS, MapReduce e YARN costituiscono il nucleo di Apache ™ Hadoop®.
HDFS è progettato per essere altamente fault-tolerant, che si ottiene salvando più copie (3 di default) di un dato blocco di dati su più nodi.
Ricerca di file in HDFS
Per trovare un file nel file system Hadoop distribuito:
hdfs dfs -ls -R / | grep [search_term]
Nel comando sopra,
-ls
è per elencare i file
-R
è per ricorsivo (itera attraverso sottodirectory)
/
significa dalla directory principale
|
per convogliare l'output del primo comando al secondo
comando grep
per estrarre stringhe corrispondenti
[search_term]
nome del file da cercare nell'elenco di tutti i file nel file system hadoop.
In alternativa, il comando seguente può anche essere utilizzato per trovare e applicare anche alcune espressioni:
hadoop fs -find / -name test -print
Trova tutti i file che corrispondono all'espressione specificata e applica loro le azioni selezionate. Se non viene specificato alcun percorso, si imposta automaticamente la directory di lavoro corrente. Se non viene specificata un'espressione, per impostazione predefinita è -print.
Le seguenti espressioni primarie sono riconosciute:
-
name pattern
-
iname pattern
Viene valutato come true se il nome base del file corrisponde allo schema utilizzando il globbing del file system standard. Se si usa -iname, la corrispondenza non fa distinzione tra maiuscole e minuscole.
-
print
-
print0Always
Valuta per vero. Fa sì che il percorso corrente sia scritto sullo standard output. Se viene utilizzata l'espressione -print0
viene aggiunto un carattere ASCII NULL.
I seguenti operatori sono riconosciuti:
expression -a expression
expression -and expression
expression expression
Blocchi e divisioni HDFS
Block Size e Blocks in HDFS : HDFS ha il concetto di memorizzare i dati in blocchi ogni volta che un file viene caricato. I blocchi sono le partizioni fisiche dei dati in HDFS (o in qualsiasi altro file system, peraltro).
Ogni volta che un file viene caricato su HDFS, viene suddiviso fisicamente (sì, il file è diviso) in parti diverse conosciute come blocchi. Il numero di blocchi dipende dal valore di
dfs.block.size
inhdfs-site.xml
Idealmente, la dimensione del blocco è impostata su un valore elevato, ad esempio 64/128/256 MB (rispetto ai 4KB in normali FS). Il valore della dimensione del blocco predefinito sulla maggior parte delle distribuzioni di Hadoop 2.x è 128 MB. Il motivo per una maggiore dimensione del blocco è dato dal fatto che Hadoop è fatto per gestire PetaByte di dati con ogni file che va da poche centinaia di MegaByte all'ordine dei TeraByte.
Supponiamo ad esempio di avere un file di dimensioni 1024 MB. se la dimensione del tuo blocco è 128 MB, otterrai 8 blocchi da 128 MB ciascuno. Ciò significa che il tuo namenode dovrà memorizzare i metadati di
8 x 3 = 24
file (3 è il fattore di replicazione).Considerare lo stesso scenario con una dimensione di blocco di 4 KB. Il risultato sarà
1GB / 4KB = 250000
blocchi e ciò richiederà il namenode per salvare i metadati per750000
blocchi solo per un file da 1 GB. Poiché tutte queste informazioni relative ai metadati sono archiviate in memoria, è preferibile una dimensione di blocco più grande per salvare quel bit di carico extra sul NameNode.Ora di nuovo, la dimensione del blocco non è impostata su un valore estremamente alto come 1 GB ecc. Perché, idealmente, viene lanciato 1 mapper per ogni blocco di dati. Quindi, se si imposta la dimensione del blocco su 1 GB, si potrebbe perdere il parallelismo che potrebbe comportare un throughput più lento in generale.
2.) Dimensione suddivisa in HDFS : le divisioni nell'elaborazione di Hadoop sono le porzioni logiche dei dati. Quando i file sono suddivisi in blocchi, hadoop non rispetta nessun bopundario di file. Si divide solo i dati a seconda della dimensione del blocco. Se hai un file di 400 MB, con 4 righe e ogni riga con 100 MB di dati, otterrai 3 blocchi di 128 MB x 3
e 16 MB x 1
. Ma quando le divisioni di input vengono calcolate durante il prceossing dei dati, i limiti di file / record vengono tenuti a mente e in questo caso avremo 4 split di input di 100 MB ciascuno, se si utilizza, ad esempio, NLineInputFormat
.
Le dimensioni mapreduce.input.fileinputformat.split.maxsize
possono anche essere impostate per lavoro utilizzando la proprietà mapreduce.input.fileinputformat.split.maxsize
Una buona spiegazione di Blocks vs Splits può essere trovata in questa risposta SO /