我正在从符合S3标准的对象存储中通过网络传输Avro编码文件,并尝试读取它并将其放入某些数据结构中。
问题:我有时遇到的问题(在连续运行的测试节点中,在一两天内一两次)是文件的一半,它会遇到此异常{{1} } Invalid sync!
类中的nextRawBlock()
方法。
我想检测其根本原因并修复。我一直在努力 在测试应用程序中重现此但无法成功完成此操作。我正在寻找
的想法可能导致这种情况的原因是什么?
任何更好的方法来重现这一点。
更多详情
a)Avro文件没有下载到磁盘,我使用S3ObjectInputStream获取文件流的句柄并将其提供给DataFileStream构造函数 然后直接从流中读取。
b)应用程序尝试批量读取Avro编码文件中的记录 一次500条记录。
c)该文件包含一个标题部分,其中包含一个Long计数和一个String to Integer的KV Map。之后它包含一个记录数组,其中每个记录包含一个String和一个long数组。该模式使用Avro的union构造来实现此功能。
d)文件中的记录数平均约为5M
e)整个下载发生在单独的线程中,而不是在任何用户请求中。
f)文件通过单独的流程上传到商店。
其他观察: a)失败后,应用关闭流并尝试再次下载并读取流。我观察到的是,这会使节点处于高老状态,从而减慢用户请求。