2014-06-19 10 views
6

Ho una domanda di base riguardanti il ​​file scrive e legge in HDFS.Hadoop: File HDFS Scrive & Legge

Per esempio, se sto scrivendo un file, utilizzando le configurazioni di default, Hadoop ha al suo interno di scrivere ogni blocco a 3 nodi di dati. La mia comprensione è che per ogni blocco, prima il client scrive il blocco sul primo nodo di dati nella pipeline che informerà il secondo e così via. Una volta che il terzo nodo dati riceve correttamente il blocco, fornisce un riconoscimento al nodo dati 2 e infine al client tramite il nodo Dati 1. Solo dopo aver ricevuto il riconoscimento per il blocco, la scrittura viene considerata valida e il client procede alla scrittura il prossimo blocco.

Se questo è il caso, allora non è il tempo impiegato per scrivere ogni blocco è più di un file di scrittura tradizionale, a causa -

  1. il fattore di replica (di default è 3) e
  2. la il processo di scrittura sta avvenendo sequenzialmente blocco dopo blocco.

Per favore correggimi se ho torto nella mia comprensione. Inoltre, le seguenti domande qui sotto:

  1. mia comprensione è che File lettura/scrittura in Hadoop non ha alcun parallelismo e il meglio che può eseguire è lo stesso in un file tradizionale di lettura o scrittura (cioè se la replica è impostato su 1) + un overhead coinvolto nel meccanismo di comunicazione distribuito.
  2. parallelismo viene fornita solo durante la fase di elaborazione dei dati tramite Mappa Ridurre, ma non durante il file in lettura/scrittura da un cliente.

risposta

1

Sebbene il sopra spiegazione di un file di scrittura è corretta, un DataNode può leggere e scrivere dati simultaneamente. Da HDFS Architecture Guide:

un DataNode può essere ricevendo dati dalla precedente nella pipeline e gli stessi dati di inoltro tempo a quello successivo nella pipeline

Un'operazione di scrittura richiede più tempo di quanto su un file system tradizionale (a causa di problemi di larghezza di banda e sovraccarico generale) ma non fino a 3x (presupponendo un fattore di replicazione di 3).

+0

Così efficace, un l'operazione di scrittura o lettura in hadoop sta avendo un rendimento più lento rispetto a un file di lettura/scrittura tradizionale. Inoltre, non importa quale sia la dimensione del cluster. Maggiore è il fattore di replicazione, maggiore è il tempo necessario per scrivere sui dati. Mi sto solo chiedendo come copiare i dati nell'ordine dei petabyte da/a un cluster hadoop con prestazioni così lente. Il solo raggiungimento delle prestazioni durante l'elaborazione non è sufficiente da solo, poiché saremo comunque condizionati dalla velocità con cui i dati vengono copiati in/out di hadoop. –

1

Credo che la vostra comprensione è corretta.

Si potrebbe prevedere che un semplice client HDFS scrive alcuni dati e quando almeno una replica di blocco è stata scritta, riprende il controllo, mentre HDFS asincrono genera le altre repliche.

Ma in Hadoop, HDFS è progettato intorno al modello "write once, read molte volte" in modo che il fuoco non era su prestazioni di scrittura.

D'altra parte si può trovare il parallelismo in Hadoop MapReduce (che può essere visto anche un client HDFS) progettato esplicitamente di farlo.

1

HDFS di un'operazione di scrittura:

ci sono due parametri

dfs.replication: replica blocco predefinito. Il numero effettivo di repliche può essere specificato al momento della creazione del file. Il valore predefinito viene utilizzato se la replica non viene specificata nel momento della creazione

dfs.namenode.replication.min: Replica di blocchi minima.

Anche se dfs.replication insieme come 3, funzionamento scrittura sarà considerata di successo volta dfs.namenode.replication.min (default value : 1) è stato replicato.

Ma questa replica fino a dfs.replication avverrà in gasdotto sequenziale. Il primo Datanode scrive il blocco e lo inoltra al secondo Datanode. Il secondo Datanode scrive il blocco e lo inoltra al terzo Datanode.

DFSOutputStream mantiene anche una coda interna di pacchetti che attendono di essere riconosciuti dai datanode, chiamati coda ack. Un pacchetto viene rimosso dalla coda degli accessi solo quando è stato riconosciuto da tutti i Datanode nella pipeline.

Dai un'occhiata alla relativa domanda SE: Hadoop 2.0 data write operation acknowledgement

HDFS operazione di lettura:

HDFS le operazioni di lettura avvengono in parallel anziché sequenziale come operazioni di scrittura