当前位置: 首页 > 知识库问答 >
问题:

Flume java.lang.IllegalStateException:文件在读取后大小已更改

薛承志
2023-03-14

我有一个java应用程序,它从不同的来源收集数据并将输出写入特定目录下的文件。

我有一个水槽代理配置为使用spoldir源代码从该目录读取并使用MorphlineSolrSink将输出写入Solr。

水槽代理引发以下异常

java.lang.IllegalStateException: File has changed size since being read

这是水槽代理的配置

agent02.sources = s1
agent02.sinks = solrSink
agent02.channels = ch1

agent02.channels.ch1.type = file
agent02.channels.ch1.checkpointDir=/home/flume/prod_solr_chkpoint/file-channel/checkpoint
agent02.channels.ch1.dataDirs= /home/flume/prod_solr_chkpoint/file-channel/data

agent02.sources.s1.type = spooldir
agent02.sources.s1.channels = ch1

agent02.sources.s1.spoolDir = /DataCollection/json_output/solr/
agent02.sources.s1.deserializer.maxLineLength = 100000

agent02.sinks.solrSink.type = org.apache.flume.sink.solr.morphline.MorphlineSolrSink
agent02.sinks.solrSink.channel = ch1
agent02.sinks.solrSink.batchSize = 10000
agent02.sinks.solrSink.batchDurationMillis = 10000
agent02.sinks.solrSink.morphlineFile = morphlines.conf 
agent02.sinks.solrSink.morphlineId = morphline

我从异常中理解的是,flume代理开始处理文件,而java应用程序没有完成它的编写。

如何解决此问题?

我不知道这些信息是否有价值。这些配置以前可以正常工作,没有任何问题。我们运行水槽的机器遇到了硬盘故障。从故障中恢复后,水槽抛出此异常。

共有2个答案

戚建白
2023-03-14

将源文件写入另一个目录,然后将文件移动(mv命令)到假脱机源代码目录。它应该工作。不要使用复制命令。

洪飞扬
2023-03-14

如有关假脱机目录源的文档中所述:

为了换取这种可靠性,只有不可变的、唯一命名的文件必须放入假脱机目录。Flume会尝试检测这些问题条件,如果违反它们,将大声失败:

    < li >如果文件在放入假脱机目录后被写入,Flume将在其日志文件中打印错误并停止处理。 < li >如果文件名在以后被重复使用,Flume将在其日志文件中打印错误并停止处理。

我建议您的Java应用程序将大量数据转储到临时文件中;通过添加创建时间戳来命名它们。一旦存储桶已满(即达到特定大小),则将文件移动到假脱机目录。

 类似资料:
  • 本文向大家介绍Python按行读取文件的实现方法【小文件和大文件读取】,包括了Python按行读取文件的实现方法【小文件和大文件读取】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python按行读取文件的实现方法。分享给大家供大家参考,具体如下: 小文件: 大文件: 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操

  • 问题内容: 我正在使用appengine-maven-plugin构建我的Java Google App Engine项目。 我在WEB-INF子文件夹中包含.p12证书 当我构建应用程序时,证书的文件大小增加了几KB。这使其无效。我也看到过同样的情况。jks证书。 我已经验证了证书预构建的有效性,并使用相同的方法来确认构建后证书的有效性。 谁能告诉我为什么文件大小在变化,为什么不将其简单地复制到

  • 问题内容: 我有一个无法访问的PC上托管的网站。我有一个上传表单,允许人们上传最大30MB的mp3文件。我的服务器端脚本是用PHP完成的。 每次尝试上传文件时,都会收到一条错误消息,声称文件超出了允许的最大大小,因此我需要增加大小。我在网络上的研究建议更改我无权访问的文件,这样将无法正常工作。其他人建议我将自定义文件添加到我的根目录中,该文件无效。还有其他建议吗? 问题答案: 您需要设置的值,并在

  • 以下是我的骡子配置。 http://www.mulesoft.org/schema/mule/test http://www.mulesoft.org/schema/mule/test/3.6/mule-test.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.6/mul

  • 问题内容: 我有一个大文件,需要阅读并制作字典。我希望尽快。但是我在python中的代码太慢了。这是显示问题的最小示例。 首先制作一些假数据 现在,这里是一个最小的python代码片段,可以读入它并制作一个字典。 时间: 但是,可以更快地读取整个文件,如下所示: 我的CPU有8个核心,是否可以在python中并行化此程序以加快速度? 一种可能是读取大块输入,然后在不同的非重叠子块上并行运行8个进程

  • 问题内容: 我尝试了几种方法来获取文件大小,但始终为零。 我在日志中: 问题答案: 使用而不是 +调用attr上的.fileSize()。 在Swift 2.0中,我们使用do try catch模式,如下所示: 在Swift 3.x / 4.0中: