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

  1. 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 in hdfs-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 per 750000 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 /



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow