2016-01-18 6 views
5

Im Versuch mit Avro-Dateien in eine große Datei zu verschmelzen, das Problem ist concat Befehl nicht akzeptieren, die WildcardConcat Avro Dateien Avro-Tools

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

ich:

Exception in thread "main" java.io.FileNotFoundException: Datei existiert nicht:/input/Teil *

ich versuchte "" eine zu verwenden, nd '' aber keine chance.

+0

Wo sind Ihre Eingabedateien? – zhutoulala

+0

@zhutoulala gibt es einige Dateien unter '/ input /' – 54l3d

+0

@ 54l3d: Ich denke, die Frage war: Sind sie auf dem lokalen Dateisystem oder HDFS gespeichert? –

Antwort

7

Ich habe Avros Quellcode (1.7.7) schnell überprüft und es scheint, dass concat keine Glob-Muster unterstützt (im Grunde nennen sie FileSystem.open() für jedes Argument außer dem letzten).

Es bedeutet, dass Sie alle Dateinamen explizit als Argument angeben müssen. Es ist mühsam, aber folgender Befehl sollte das tun, was Sie wollen:

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

Es wäre eine schöne Ergänzung seiner Unterstützung von glob Mustern auf diesen Befehl hinzuzufügen.

+0

stellen Sie sicher, "gefundene xxx Elemente" aus hadoop fs Auflistung –

+1

@EdiBice herauszufiltern Das Beispiel aktualisiert. Danke für den Tipp! – erwaman