使用avro-tools的Concat Avro文件

54l*_*l3d 8 hadoop hdfs avro avro-tools

我试图将avro文件合并到一个大文件中,问题是concat命令不接受通配符

hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro
Run Code Online (Sandbox Code Playgroud)

我明白了:

线程"main"中的异常java.io.FileNotFoundException:文件不存在:/ input/part*

我试图使用"",''但没有机会.

Clé*_*IEU 11

我很快检查了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
Run Code Online (Sandbox Code Playgroud)

添加对此命令的glob模式支持是一个很好的补充.