2013-05-05 11 views
5

Voglio misurare il throughput su ciascun datanode misurando il tempo impiegato per ogni operazione di lettura/scrittura. È molto difficile leggere le milioni di funzioni e scoprire dove sta accadendo. Qualcuno potrebbe elencare la serie di chiamate fatte durante la lettura/scrittura di un blocco di dati? sto usando la versione 1.0.1. In alternativa, se esiste già un'API che misura questo al data-an, potrei usare quell'informazione.Misurazione della velocità effettiva su datanode

+1

Per quanto riguarda il commento di taglie: Se si blacklist un nodo, non sarà più partecipare al gruppo, e così il throughput non si riprenderà mai. – likeitlikeit

+0

Hey Bug Catcher, qualche idea sulla mia risposta qui sotto? – Engineiro

+0

@likeitlikeit Ho fatto qualcosa sulla linea della politica esistente per i battiti del cuore: dargli tre possibilità e, se è ancora male, inseriscilo nella lista nera. Non inteso per uso pratico comunque –

risposta

1

Le classi importanti da studiare per misurare il throughput sono FSDataOutputStream per le scritture e FSDataInputStream per le letture.

file letto: La prima cosa che un nodo non durante la lettura di un file è chiamata open() sull'oggetto FileSystem. A questo punto, sai che questo nodo inizierà a leggere a breve e puoi inserire il codice dopo che questa chiamata è tornata con successo per preparare le tue misure. La chiamata a open() su HDFS crea un'istanza di DistributedFileSystem che comunica con il NameNode per raccogliere le posizioni dei blocchi (ordinate in base alla prossimità del nodo di chiamata). Infine, l'oggetto torna DistributedFileSystemFSDataInputStream ("vede" la lettura di un file) che a sua volta avvolge DFSInputStream ("vede" la lettura di blocchi, gestisce il fallimento). Le tue misurazioni saranno incluse nella chiamata read() e close() sullo FSDataInputStream.

Scrittura file: Il nodo chiamerà create() su FileSystem. A questo punto vengono effettuati vari controlli che comprendono le autorizzazioni dei file, la disponibilità ecc., Ma al completamento con esito positivo restituisce un oggetto FSDataOutputStream che include uno DFSOutputStream. Lo stesso concetto si applica dove si vede una scrittura continua mentre l'altra gestisce la coerenza del fattore di replicazione (cioè una scrittura = tre scritture) e il fallimento. Analogamente a una lettura, le misure verranno incluse nell'ambito della chiamata write() e close() sullo FSDataInputStream.

Per eseguire questa operazione a livello globale per tutti i nodi del cluster, è necessario eseguire l'override di questi metodi come parte della distribuzione di Hadoop che si condivide nel cluster.

+0

Non spiega come aggregare le statistiche per ciascun nodo di dati. Non ci si può aspettare che i nodi client modifichino i singoli nodi di dati e inviino informazioni al nodo del nome. Ad ogni modo, dal momento che il mio bisogno è passato, accetterò questa risposta –

Problemi correlati