我试图将 avro 文件合并到一个大文件中,问题是concat
命令不接受通配符
hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro
我得到:
线程“主”java.io.FileNotFoundException 中的异常:文件不存在:/input/part*
我尝试使用""
但''
没有机会。
我试图将 avro 文件合并到一个大文件中,问题是concat
命令不接受通配符
hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro
我得到:
线程“主”java.io.FileNotFoundException 中的异常:文件不存在:/input/part*
我尝试使用""
但''
没有机会。
我很快检查了 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
向该命令添加对 glob 模式的支持将是一个很好的补充。
而不是hadoop jar avro-tools.jar
one can run java -jar avro-tools.jar
,因为您不需要 hadoop 进行此操作。