alcune cose da capire su HDFS e M/R che aiuta a capire questa latenza:
- HDFS archivia i file come porzioni di dati distribuiti su più macchine denominate datanodes
- M/R esegue più programmi chiamati mapper su ciascuno dei blocchi o blocchi di dati. L'output (chiave, valore) di questi mappatori viene compilato insieme come risultato dai riduttori. (Pensa a sommare i vari risultati di più mapper)
- Ogni mapper e riduttore è un programma completo che viene generato su questi sistemi distribuiti. Ci vuole del tempo per generare un programma completo, anche se diciamo che non hanno fatto nulla (la mappa No-OP riduce i programmi).
- Quando la dimensione dei dati da elaborare diventa molto grande, questi tempi di generazione diventano insignificanti e cioè quando Hadoop brilla.
Se si dovesse elaborare un file con un contenuto di 1000 righe, è preferibile utilizzare un normale file di lettura e un programma di elaborazione. L'infrastruttura Hadoop per generare un processo su un sistema distribuito non produrrà alcun vantaggio, ma contribuirà solo al sovraccarico aggiuntivo di localizzazione di datanode contenenti blocchi di dati rilevanti, avviando i programmi di elaborazione su di essi, monitorando e raccogliendo i risultati.
Ora espandilo a 100 byte Peta di dati e questi overheads sembrano completamente insignificanti rispetto al tempo necessario per elaborarli. La parallelizzazione dei processori (mapper e riduttori) mostrerà il suo vantaggio qui.
Quindi, prima di analizzare le prestazioni del tuo M/R, dovresti prima cercare di confrontare il tuo cluster in modo da comprendere meglio i costi generali.
Quanto tempo è necessario per eseguire un programma di riduzione della mappa senza operazioni su un cluster?
Usa MRBench per questo scopo:
- MRbench loop un piccolo lavoro di un certo numero di volte
- Verifica se piccole serie di posti di lavoro sono sensibili e in esecuzione in modo efficiente nel cluster.
- Il suo impatto sullo strato di HDFS è molto limitata
Per eseguire questo programma, provare quanto segue (Verificare il corretto approccio per le versioni più recenti:
hadoop jar /usr/lib/hadoop-0.20/hadoop-test.jar mrbench -numRuns 50
Sorprendentemente su uno dei nostri cluster dev esso era 22 secondi.
Un altro problema è la dimensione del file.
Se le dimensioni del file sono inferiori alla dimensione del blocco HDFS, i programmi di mappatura/riduzione hanno un sovraccarico significativo. Generalmente Hadoop tenta di generare un mapper per blocco. Ciò significa che se hai 30 file da 5 KB, allora Hadoop potrebbe finire per spawnare fino a 30 mapper per blocco, anche se la dimensione del file è piccola. Questo è un vero spreco poiché ogni overhead del programma è significativo rispetto al tempo che impiegherebbe a elaborare il file di piccole dimensioni.
Quanti file compongono il 3GB di dati? quante attività cartografiche sono utilizzate da jobtracker per eseguire questo lavoro? –
@yura: 30 sec o 30 min? – FourOfAKind
30 secondi e circa 300 mappatori, ad es.divide – yura