2011-09-16 11 views
7

Sono in grado di trovare il nome se il file di input in una classe mapper utilizza FileSplit quando si scrive il programma in Java.Ottieni il nome del file di input nello streaming del programma hadoop

c'è un modo corrispondente per fare questo quando scrivo un programma in Python (usando streaming?)

ho trovato la seguente nel documento di streaming Hadoop su Apache:

Vedi configurati parametri. Durante l'esecuzione di un lavoro di streaming, i nomi dei parametri "mappati" vengono trasformati. I punti (.) diventano caratteri di sottolineatura (_). Ad esempio, mapred.job.id diventa mapred_job_id e mapred.jar diventa mapred_jar. Nel codice, utilizzare i nomi dei parametri con i caratteri di sottolineatura.

Ma non riesco ancora a capire come utilizzarlo all'interno del mio mapper.

Qualsiasi aiuto è molto apprezzato.

Grazie

risposta

7

Secondo la "Hadoop : The Definitive Guide"

Hadoop imposta i parametri di configurazione di lavoro come variabili di ambiente per i programmi in streaming. Tuttavia, sostituisce il carattere non alfanumerico con caratteri di sottolineatura per assicurarsi che siano nomi validi. La seguente espressione Python illustra come è possibile recuperare il valore della proprietà mapred.job.id dall'interno di uno script Python Streaming:

os.environ [ "mapred_job_id"]

È inoltre possibile impostare le variabili d'ambiente per la Processo di streaming lanciato da MapReduce applicando l'opzione -cmdenv al programma di avvio Streaming (una volta per ciascuna variabile che si desidera impostare). Ad esempio, la seguente imposta la variabile di ambiente MAGIC_PARAMETER:

-cmdenv MAGIC_PARAMETER = abracadabra

+2

Sembra che la proprietà richiesta da Krishnamutry sia denominata "map.input.file", che probabilmente verrà visualizzata come variabile di ambiente "map_input_file" sul lavoro di streaming. –

+0

Nota: i periodi devono essere sostituiti con caratteri di sottolineatura –

+0

Grazie - aggiornato. –

0

Il nuovo ENV_VARIABLE per Hadoop 2.x è MAPREDUCE_MAP_INPUT_FILE

+0

Dovresti usare la minuscola 'mapreduce_map_input_file' – ofekp

4

Analizzando il mapreduce_map_input_file (nuovo) o map_input_file (variabile), si otterrà il nome del file di input della mappa.

Avviso:
Le due variabili d'ambiente sono maiuscole e minuscole, tutte le lettere sono minuscole.

+1

'map_input_file' funziona per hadoop 0.20.x per chiunque sia bloccato su un vecchio cluster – Blake

Problemi correlati