2016-01-18 8 views
5

Im пытаются объединить Avro файлов в один большой файл, проблема concat команды не принимает ПодстановочногоConcat Avro файлы с помощью Авро-инструментов

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

я получаю:

Exception в потоке "основной" java.io.FileNotFoundException: Файл действительно не существует:/вход/часть *

Я пытался использовать "" в nd '' но нет шанс.

+0

Где ваши входные файлы? – zhutoulala

+0

@zhutoulala есть некоторые файлы под '/ input /' – 54l3d

+0

@ 54l3d: Я думаю, вопрос был: они хранятся в локальных файловых системах или HDFS? –

ответ

7

Я быстро проверил исходный код Avro (1.7.7), и кажется, что concat не поддерживает шаблоны glob (в основном они вызывают FileSystem.open() по каждому аргументу, кроме последнего).

Это означает, что вы должны явно указать все имена файлов в качестве аргумента. Это громоздко, но следующая команда должна делать то, что вы хотите:

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

Было бы хорошее дополнение добавить поддержку Глоб шаблон для этой команды.

+0

не забудьте отфильтровать «Найденные ххх элементы» из списка hadoop fs –

+1

@EdiBice Обновлен пример. Спасибо за совет! – erwaman