flume异常崩溃 File has been modified since being read

日志采集异常,生产报错误日志:

(org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryRunnable.run:280) - FATA
L: Spool Directory source spool_source: { spoolDir: /apps/logs/libra }: Uncaught exception in SpoolDirectorySource thread. Restart or
reconfigure Flume to continue processing.
java.lang.IllegalStateException: File has been modified since being read: /apps/logs/libra/financial-webapp/spool/libra.2018-03-09_09-
10-16.tmp

看提示应该是flume读文件时,该文件正被其他进程修改。

查阅资料有人因为大日志文件导致该问题(http://www.bubuko.com/infodetail-508764.html),仔细分析flume的源码,发现应该不是这个原因。

因为我们的文件很小。

后来发现是因为两个系统用了用一个日志目录,日志文件的格式均为年月日时分秒,如果同一秒两个系统都写文件,一个系统写完,flume去获取发现已经写完,这时候另一个系统又去写,这时flume会和写进程冲突。

解决办法就是两个系统分写两个目录,或者文件名区分开同一秒的两个文件。

另外针对大文件,flume的解决方案可以设置一个文件完成后缀:

SPOOLED_FILE_SUFFIX

以下摘自flume 1.7源码,可以看到,当后缀匹配是才会取。大文件可以在写完时修改后缀,可以避免大文件问题。
public FileVisitResult visitFile(Path candidate, BasicFileAttributes attrs)    throws IOException {  String fileName = candidate.getFileName().toString();  if (!fileName.endsWith(completedSuffix) &&      !fileName.startsWith(".") &&      includePattern.matcher(fileName).matches() &&      !ignorePattern.matcher(fileName).matches()) {    candidateFiles.add(candidate.toFile());  }其中
completedSuffix = context.getString(SPOOLED_FILE_SUFFIX,    DEFAULT_SPOOLED_FILE_SUFFIX);


原文地址:https://www.cnblogs.com/reachlins/p/8568093.html

时间: 2024-08-01 23:09:56

flume异常崩溃 File has been modified since being read的相关文章

flume spoolDirectorySource中的 File has been modified since being read与File has changed size since being read错误

以下内容都为自己浅显的理解,用作备忘的流水账,所以写的比较混乱.如理解有错误,请帮忙指正 FLUME-NG中没有之前的对文件的实时流SOURCE,只提供了spoolDir的source,这个source的功能监控指定文件夹,放入文件夹内的文件不能再做任何修改(包括修改时间和文件大小),这2个错误正是对应这2个 在代码中体现为 org.apache.flume.client.avro.ReliableSpoolingFileEventReader.retireCurrentFile()方法内 1

Android开发:StaggeredGridView瀑布流控件运行异常崩溃解决方法

StaggeredGridView是github上一个开源的瀑布流图片库,本文将分享集成StaggeredGridView时碰到的异常以及解决方法,StaggeredGriedView开源地址为:https://github.com/maurycyw/StaggeredGridView. StaggeredGriedViewDemo运行报错异常为: java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.ex

Qt程式异常崩溃处理技巧(Win)

这篇文章谈的是 Qt4 程式在视窗系统下的异常崩溃处理技巧,所以需要在头文件中包含"#include <Windows.h>". 首先,程式难免会有异常崩溃的时候,重要的是在崩溃时能及时把重要的数据保存好,将损失降低. SetUnhandledExceptionFilter函数是Win32API的异常捕获函数,在程式异常结束前,会调用该函数注册的回调函数,这样就能在进程终止前执行指定的代码,达到例如保存数据的功能. LONG ApplicationCrashHandler(

【有意思的BUG】客户端无厘头 已连网的场景初始化太慢 未连网的场景异常崩溃

客户端 已连网的场景初始化太慢 当在未连接internet的时候,打开某些APP,会比较迅速地初始化进入到主页面. 但是当我在已经连接了internet的时候,打开某些APP,有些会初始化很久!!!! 举例1: 已经连接了internet的时候,打开网易有道词典. 这时候,客户端从“网易有道词典封面页”跳转到“搜词页”,此时尝试触屏去点击搜索输入框区域是无效的,因为页面正在等待服务器的响应,这个等待时间太久了,短则5-10秒,长则20秒. 不知道设计者有没有考虑“英文词典”这类软件的使用场景?当

java019异常、File类

异常的分类: * Error:称为错误类.表示java运行时系统内部错误或者资源耗尽的错误,仅靠修改程序本身不能恢复执行的.比如:服务器宕机,数据库崩溃等 * Exception:称为异常类,表示程序本身可以处理的错误. 继承体系 * Throwable  * Error   * Exception   * RuntimeException //除了运行时异常都是编译时异常,一般都是程序员本身的错误 JVM默认处理异常的方式: * a:自己将该问题处理,然后继续运行,对应下方的 a 代码 * b

JavaEE基础(十九)/异常和File

1.异常(异常的概述和分类) A:异常的概述 异常就是Java程序在运行过程中出现的错误. B:异常的分类 通过API查看Throwable Error 服务器宕机,数据库崩溃等 Exception C:异常的继承体系 Throwable Error Exception RuntimeException 2.异常(JVM默认是如何处理异常的) A:JVM默认是如何处理异常的 main函数收到这个问题时,有两种处理方式: a:自己将该问题处理,然后继续运行 b:自己没有针对的处理方式,只有交给调用

6.01_异常与File类

一.异常的概述和分类 * A:异常的概述 * 异常就是Java程序在运行过程中出现的错误. * B:异常的分类 * 通过API查看Throwable * Error * 服务器宕机,数据库崩溃等 * Exception C:异常的继承体系 * Throwable * Error * Exception * RuntimeException 二.JVM默认是如何处理异常的 * A:JVM默认是如何处理异常的 * main函数收到这个问题时,有两种处理方式: * a:自己将该问题处理,然后继续运行

异常及File类概述

一.异常 1.异常分类: Throwable:Throwable类是 Java 语言中所有错误或异常的超类.它只有两个子类 Error:属于严重问题,只能避免:如内存溢出(OutOfMemory) Exception:可以解决的异常问题 编译时期异常:在写代码期间遇到的异常,不处理没办法运行: 运行时期异常(RuntimeException):在程序运行时期遇到的异常,一般情况不是编译时期异常就是运行时期异常: 2.异常处理: 1)捕获异常:try-catch-finally A:格式:try{

python使用异步任务celery出现异常崩溃时retry重试

前言: python下的celery是啥东西大家应该有了解,是一个异步的任务框架 .话说,  我以前写过一个报警平台的项目,也需要任务的扩展成分布式,当时总是觉得 用celery不是那么太靠谱,所以就自己写了一个分布式的任务派发的系统. 今个和朋友聊起了分布式爬虫,这哥们说 任务有时候经常的崩溃,但是celery的retry的机制有些意思,最后看了下文档  ,又研究了下retry的参数,然后把自己的一些实战分享给大家. #xiaorui.cc @celery.task(bind=True,max