flume报java.io.IOException: Not a data file的ERROR

来源:互联网 发布:ubuntu的网卡配置文件 编辑:程序博客网 时间:2024/06/05 18:07


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异常结束在启动时出现上述错误。



阅读全文
0 0
原创粉丝点击