2016-01-18 41 views
5

nel tentativo di unire file Avro in un unico file, il problema è concat comando non accetta il carattere jollyfile Concat Avro utilizzando Avro-tools

hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro 

ottengo:

Exception in thread "principale" java.io.FileNotFoundException: File non non esiste:/ingresso/part *

ho cercato di usare un "" nd '' ma nessuna possibilità.

+0

dove sono i file di input? – zhutoulala

+0

@zhutoulala ci sono alcuni file sotto '/ input /' – 54l3d

+0

@ 54l3d: Penso che la domanda fosse: sono memorizzati sui file system locali o su HDFS? –

risposta

7

Ho controllato rapidamente il codice sorgente di Avro (1.7.7) e sembra che concat non supporti i pattern glob (in pratica chiamano FileSystem.open() per ciascun argomento tranne l'ultimo).

Significa che è necessario fornire esplicitamente tutti i nomi di file come argomento. E 'ingombrante, ma seguente comando dovrebbe fare quello che vuoi:

IN=$(hadoop fs -ls /input/part* | awk '{printf "%s ", $NF}') 
hadoop jar avro-tools.jar concat ${IN} /output/bigfile.avro 

Sarebbe una bella aggiunta per aggiungere il supporto di modello di glob a questo comando.

+0

assicuratevi di filtrare "Trovato articoli xxx" da hadoop fs list –

+1

@EdiBice Aggiornato l'esempio. Grazie per il consiglio! – erwaman