在使用flume采集日志写入hdfs的时候,可以通过
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
配置目录名称为日期,默认情况下会使用系统时间,但是在日志采集过程中经常会发生延迟情况,比如23:59的日志00:01才采集完,那这个时候本来是前一天的日志就会被写入第二天的目录里,后续ETL的过程中就会发生误差,这个时候我们会想,能不能使用日志里的时间字段来作为hdfs的文件目录呢?配置拦截器,在 headers 里添加 timestamp 可以实现这个功能。
首先创建一个maven项目,pom.xml添加依赖:
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-core</artifactId>
<version>1.7.0</version>
</dependency>
这里flume实际使用的是什么版本就写什么版本,我用的是1.7
然后创建 TimestampInterceptor.java
package com.flume;
import org.apache.flume.Context;
import org.apache.flume.Event;
i