我试图将avro文件合并成一个大文件,问题是 concat 命令不接受通配符
concat
hadoop jar avro-tools.jar concat /input/part* /output/bigfile.avro
我得到:线程“main”java.io.filenotfoundexception中出现异常:文件不存在:/input/part*我试着用 "" 以及 '' 但没有机会。
""
''
ovfsdjhp1#
而不是 hadoop jar avro-tools.jar 一个人可以跑 java -jar avro-tools.jar ,因为此操作不需要hadoop。
hadoop jar avro-tools.jar
java -jar avro-tools.jar
bogh5gae2#
我很快检查了avro的源代码(1.7.7),似乎concat不支持glob模式(基本上,它们调用 FileSystem.open() 除了最后一个以外的每个论点)。这意味着您必须显式地提供所有文件名作为参数。这很麻烦,但下面的命令应该可以满足您的需要:
FileSystem.open()
IN=$(hadoop fs -ls /input/part* | awk '{printf "%s ", $NF}') hadoop jar avro-tools.jar concat ${IN} /output/bigfile.avro
向这个命令添加对glob模式的支持将是一个很好的补充。
2条答案
按热度按时间ovfsdjhp1#
而不是
hadoop jar avro-tools.jar
一个人可以跑java -jar avro-tools.jar
,因为此操作不需要hadoop。bogh5gae2#
我很快检查了avro的源代码(1.7.7),似乎concat不支持glob模式(基本上,它们调用
FileSystem.open()
除了最后一个以外的每个论点)。这意味着您必须显式地提供所有文件名作为参数。这很麻烦,但下面的命令应该可以满足您的需要:
向这个命令添加对glob模式的支持将是一个很好的补充。