2013-05-23 10 views
12

ho cercato di definire ciò che il throughput elevato vs bassa latenza significa in HDFS con parole mie, e si avvicinò con la seguente definizione:alto rendimento vs bassa latenza in HDFS

HDFS è ottimizzato per lotti di accesso di set di dati più veloce (alto rendimento ), piuttosto che particolari record in quel set di dati (a bassa latenza )

ha senso? :)

Grazie!

+0

mi sembra soddisfacente. – Tariq

risposta

23

Penso che quello che hai descritto sia più come la differenza tra l'ottimizzazione per diversi pattern di accesso (sequenziale, batch vs accesso casuale) rispetto alla differenza tra throughput e latenza nel senso più puro.

Quando penso a un sistema a latenza elevata, non sto pensando a quale record sto accedendo, ma piuttosto che l'accesso a qualsiasi record ha un costo generale elevato. L'accesso anche solo al primo byte di un file da HDFS può richiedere circa un secondo o più.

Se la tua inclinazione è più quantitativa, puoi pensare al tempo totale necessario per accedere a un numero di record N come T(N)=aN+b. Qui, a rappresenta il throughput e b rappresenta la latenza. Con un sistema come HDFS, N è spesso così grande che lo b diventa irrilevante e i compromessi che favoriscono un basso a sono vantaggiosi. Confrontalo in un archivio dati a bassa latenza, dove spesso ogni lettura accede solo a un singolo record e quindi l'ottimizzazione per il minimo b è migliore.

Con ciò detto, la vostra dichiarazione non è errata; è sicuramente vero, ed è spesso il caso che gli archivi di accesso batch abbiano una latenza elevata e un throughput elevato, mentre gli store ad accesso casuale hanno una bassa latenza e un basso throughput, ma questo non è sempre il caso.

+3

Questa piccola equazione è il modo più fantastico per spiegarlo :) – spacemonkey

+0

@Joe K So wrt hadoop (o qualsiasi altro sistema distribuito) è giusto dire che è necessario scalare (cioè hardware più veloce) per migliorare la latenza e ridimensionare (vale a direaggiungere più nodi) per migliorare il throughput? – sactiw

+0

Sì, direi che è probabilmente giusto per Hadoop HDFS, anche se altri sistemi distribuiti possono avere compromessi di prestazioni molto diversi. E otterrete rendimenti decrescenti aumentando; HDFS non è fondamentalmente inteso per bassa latenza. –

4

Farò uno swing a questo.

Accesso ai dati a bassa latenza: premo il tasto invio (o pulsante di invio) e I aspettiamo risultati al massimo entro secondi. Il tempo di query del mio database dovrebbe essere secondo. Alto throughput di dati: voglio eseguire la scansione di milioni di righe di dati e contare o sommare qualche sottoinsieme. Mi aspetto che questo richiederà alcuni minuti (o molto più tempo, a seconda della complessità). Pensa a più lavori in stile batch.

Avvertenze: questo è davvero un problema di mappa/riduzione anche. L'impostazione e l'elaborazione dei lavori M/R richiede un po 'di spese generali. Ci sono un paio di progetti che funzionano ora per spostarsi verso l'accesso ai dati a bassa latenza.

Inoltre, HDFS memorizza i dati in blocchi e li distribuisce su molti nodi. Ciò significa che ci sarà (quasi) sempre qualche trasferimento di dati di rete necessario per ottenere la risposta finale, e che "rallenta" un po 'le cose, a seconda della velocità effettiva e vari altri fattori.

Spero che questo aiuti. :)

Problemi correlati