Generazione di file di output separati in Hadoop Streaming
Domanda
Utilizzando solo un mapper (uno script Python) e nessun riduttore, come posso generare un file separato con la chiave come nome file, per ogni riga di output, piuttosto che avere lunghi file di output?
Soluzione
Puoi scrivere su un file di testo sul filesystem locale usando le funzioni del file python o se vuoi usare HDFS usa il API di risparmio .
Altri suggerimenti
Le classi di input e outputformat possono essere sostituite usando i parametri della riga di comando -inputformat e -outputformat.
Un esempio di come eseguire questa operazione è disponibile nel progetto dumbo , che è un pitone framework per la scrittura di lavori in streaming. Ha una funzione per scrivere su più file e internamente sostituisce il formato di output con una classe del suo progetto gemello, feathers - fm.last.feathers.output.MultipleTextFiles.
Il riduttore deve quindi emettere una tupla come chiave, con il primo componente della tupla che è il percorso della directory in cui devono essere scritti i file con le coppie chiave / valore. Potrebbero esserci ancora più file, a seconda del numero di riduttori e dell'applicazione.
Consiglio di esaminare Dumbo, ha molte caratteristiche che rendono più semplice scrivere programmi Map / Reduce su Hadoop in Python.
È possibile sostituire outputFormatClass quando si utilizza lo streaming? In un'implementazione Java nativa, estendere la classe MultipleTextOutputFormat e modificare il metodo che nomina il file di output. Quindi definire l'implementazione come nuovo formato di output con il metodo setOutputFormat di JobConf
dovresti verificare, se questo è possibile anche in streaming. I donno: - /