合并Snappy压缩Avro文件后用Avro Tool 1.8.2读取报Invalid sync!错误求助
解决Avro合并后读取时的"Invalid sync!"异常问题
我来帮你搞定这个问题!你遇到的Invalid sync!错误,核心原因是直接拼接Snappy压缩的Avro文件破坏了Avro的同步标记结构——Avro每个数据块末尾都有16字节的同步标记,用来帮读取器定位下一个块,而手动拼接压缩文件会让文件结构彻底混乱,读取时验证同步标记自然失败。
下面是具体的解决和预防方案:
一、正确合并Snappy压缩Avro文件的方法
别手动拼接文件!用Avro官方工具的concat命令,它会自动处理压缩流和同步标记:
java -jar avro-tools-1.8.2.jar concat --codec snappy input1.avro input2.avro merged_output.avro
--codec snappy指定输出文件用Snappy压缩,确保和源文件一致;- 这个命令会正确合并多个Avro文件的元数据、数据块,同时维护合法的同步标记。
二、修复已损坏的合并文件
如果已经手动合并出了问题文件,可以按以下步骤修复:
- 先解压每个源Avro文件:
java -jar avro-tools-1.8.2.jar decompress bad_input1.avro decompressed1.avro java -jar avro-tools-1.8.2.jar decompress bad_input2.avro decompressed2.avro - 合并解压后的未压缩Avro文件:
java -jar avro-tools-1.8.2.jar concat decompressed1.avro decompressed2.avro decompressed_merged.avro - 重新用Snappy压缩合并后的文件:
java -jar avro-tools-1.8.2.jar compress --codec snappy decompressed_merged.avro final_merged.avro
三、验证修复结果
用你之前的命令验证合并后的文件是否正常:
java -jar avro-tools-1.8.2.jar tojson final_merged.avro
这次应该不会再抛出同步标记的异常了。
内容的提问来源于stack exchange,提问作者Mukesh Katariya
相关产品推荐
相关产品推荐

