flume报java.io.IOException: Not a data file的ERROR
flume清洗时报错 java.io.IOException: Not a data file,错误如下图:
opening file 的文件明明是一个数据文件,非要说不是数据文件。没办法,追踪错误,查找源码去。。。
结果在 package org.apache.avro.file中的 DataFileStream 类的initialize(InputStreamin)方法中发现了异常的出处,代码如下:
void initialize(InputStream in) throws IOException { this.header = new DataFileStream.Header(); this.vin = DecoderFactory.get().binaryDecoder(in, this.vin); byte[] magic = new byte[DataFileConstants.MAGIC.length]; try { this.vin.readFixed(magic); } catch (IOException var10) { throw new IOException("Not a data file."); }
......
在 readFixed 时异常了,真正的异常是 var10 ,不知道哪位大神把异常换成了 Not a data file了。
我想看 var10 的异常怎么办呢?只好重写源码了,把 var10 打粗来。
真正的错误来啦!
java.io.EOFException 异常啊。查了下,说是读取文件的问题。
继续研究,发现是flume的一个BUG。
官方给的解释:https://issues.apache.org/jira/browse/AVRO-813
我们的解决方案是:把spooldir的source跟踪的目录下的元数据文件删除既可。
flume跟踪的目录下会自动产生 .flumespool文件夹,里面有 .flumespool-main.meta 文件。该文件我理解的是存储的读取文件的 offset,
在读取该文件的时候出现了异常,将该文件删除,一切OK啦。缺点呢是可能会造成数据少量的重复。
那也没办法了,少量的容错老子接受了 ,最后重写source组件,只要该异常出现就删除.meta文件即可。防止flume异常结束在启动时出现上述错误。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: QQ第三方登陆及同步内容到腾讯微博,腾讯空间,朋友网
- 下一篇: vue-elementUI 弹出框