flume写hdfs使用日志里的时间作为文件目录

在使用flume采集日志写入hdfs的时候,可以通过a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S配置目录名称为日期,默认情况下会使用系统时间,但是在日志采集过程中经常会发生延迟情况,比如23:59的日志00:01才采集完,那这个时候本来是前一天的日志就会被写入第二天的目录里,后续ETL的过程中就会发生误差,这个时候我们会想,能不...
摘要由CSDN通过智能技术生成

在使用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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基础的Flume配置文件示例,用于将日志数据从本地文件系统传输到HDFS中: ``` #定义agent名称和组件 agent.sources = source1 agent.sinks = sink1 agent.channels = channel1 #配置source组件 agent.sources.source1.type = spooldir agent.sources.source1.spoolDir = /path/to/local/log/files agent.sources.source1.fileHeader = true agent.sources.source1.basenameHeader = true #配置sink组件 agent.sinks.sink1.type = hdfs agent.sinks.sink1.hdfs.path = hdfs://namenode:8020/path/to/hdfs/directory agent.sinks.sink1.hdfs.fileType = DataStream agent.sinks.sink1.hdfs.writeFormat = Text #配置channel组件 agent.channels.channel1.type = memory agent.channels.channel1.capacity = 1000 agent.channels.channel1.transactionCapacity = 100 #将source组件连接至channel组件 agent.sources.source1.channels = channel1 #将sink组件连接至channel组件 agent.sinks.sink1.channel = channel1 ``` 在该示例配置中,我们定义了一个名为`source1`的source组件,它的类型为`spooldir`,即监控本地目录中的日志文件。我们还定义了一个名为`sink1`的sink组件,它的类型为`hdfs`,即将数据HDFS。我们还定义了一个名为`channel1`的channel组件,它的类型为`memory`,即在内存中缓存数据。 为了进行基础测试配置,我们可以按照以下步骤进行: 1. 将上述配置保存为`flume-hdfs.conf`文件并将其放置在`flume/conf`目录下。 2. 确保本地日志文件所在目录(在配置文件中定义的`/path/to/local/log/files`)存在,并且其中包含一些测试数据。 3. 启动Flume agent,命令为:`bin/flume-ng agent -n agent -c conf -f conf/flume-hdfs.conf -Dflume.root.logger=INFO,console`。这将启动一个名为`agent`的Flume agent,并使用`flume-hdfs.conf`配置文件进行配置。 4. 检查HDFS目录(在配置文件中定义的`hdfs://namenode:8020/path/to/hdfs/directory`)是否已经创建,并且其中是否包含了来自本地日志文件的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值