Hadoop 'pezzi' dati in blocchi di dimensioni configurato. L'impostazione predefinita è 64 MB di blocchi. Potresti vedere dove ciò causa problemi per il tuo approccio; Ogni mappatore può ottenere solo un pezzo di un file. Se il file è inferiore a 64 MB (o qualsiasi valore è configurato), ogni mapper otterrà solo 1 file.
Ho avuto un vincolo molto simile; Avevo bisogno di una serie di file (uscita dal precedente riduttore in catena) per essere interamente elaborati da un singolo mapper. Io uso il fatto di < 64 MB nella mia soluzione La spinta principale della mia soluzione è che l'ho configurato per fornire al programma di mappatura il nome del file che era necessario elaborare, e il mappatore interno aveva caricato/letto il file. Ciò consente a un singolo mappatore di elaborare un intero file: non è l'elaborazione distribuita del file, ma con il vincolo di "Non voglio singoli file distribuiti" - funziona. :)
Ho avuto il processo che ha avviato il mio MR scrivere i nomi dei file dei file da elaborare in singoli file. Dove sono stati scritti quei file era la directory di input. Poiché ogni file è < 64 MB, verrà generato un singolo mapper per ogni file. Il processo map
verrà chiamato esattamente una volta (poiché c'è solo una voce nel file).
Quindi prendo il valore passato al programma di mappatura e posso aprire il file e fare qualunque mappatura devo fare. Poiché hadoop cerca di essere intelligente su come esegue la mappatura/riduzione dei processi, potrebbe essere necessario specificare il numero di riduttori da utilizzare in modo che ogni mappatore vada a un singolo riduttore. Questo può essere impostato tramite la configurazione mapred.reduce.tasks
. Lo faccio tramite job.setNumReduceTasks("mapred.reduce.tasks",[NUMBER OF FILES HERE]);
Il mio processo aveva alcuni requisiti/vincoli aggiuntivi che potrebbero aver reso attraente questa soluzione specifica; ma per un esempio di 1: in 1: out; L'ho fatto, e le basi sono esposte sopra.
HTH
grazie, penso che sia la migliore idea. Forse userò la vecchia API perché sembra più facile da gestire, ma prima darò un'occhiata a 0.20 – spooky