2013-05-08 2 views
6

Come ho impostato il fileinputFormat come input hadoop. Il telefono arg[0]+"/*/*/*" ha risposto senza file.Can hadoop può ricevere input da più directory e file

quello che voglio è quello di leggere da più file come:

 
Directory1 
---Directory11 
    ---Directory111 
     --f1.txt 
     --f2.txt 
---Directory12 
Directory2 
---Directory21 

è possibile in Hadoop? Grazie!

risposta

3

È possibile ricevere input da più directory e file utilizzando l'operatore *****. Molto probabilmente è perché l'argomento "arg [0]" non è corretto e quindi non trova i file.

In alternativa, è anche possibile utilizzare InputFormat.addInputPath o se sono necessari formati o mappatori separati è possibile utilizzare la classe MultipleInputs.

Esempio di aggiunta di base un percorso

FileInputFormat.addInputPath(job, myInputPath); 

Ecco un esempio di MultipleInputs

MultipleInputs.addInputPath(job, inputPath1, TextInputFormat.class, MyMapper.class); 
MultipleInputs.addInputPath(job, inputPath2, TextInputFormat.class, MyOtherMapper.class); 

Questa altra domanda è anche molto simile e ha buone risposte, Hadoop to reduce from multiple input formats.

+0

Quindi leggerà dalle cartelle multiple all'interno di una cartella e in modo ricorsivo i molti file all'interno di ciascuna sottocartella ?? – JudyJiang

+0

Mi sono sbagliato e ho aggiornato la mia risposta per riflettere questo. Immagino che il tuo "arg [0]" sia sbagliato. da dove lo stai usando? se è la riga di comando potresti aver bisogno di $ arg [0], se è da codice dovresti usare l'approccio multipleinputs – greedybuddha

+0

È nel mio codice java. Ho usato FileInputFormat.setInputPaths (conf, new Path (args [0]), è l'args [0] e qualcosa dopo di esso che dovrei sostituire la parte con più directory? – JudyJiang