Flume HDFS接收器:从文件名中删除时间戳

时间:2015-11-20 06:17:28

标签: hdfs flume flume-ng

我为我的应用程序配置了flume代理,其中source是Spooldir,sink是HDFS

我可以在hdfs中收集文件。

代理配置是:

agent.sources = src-1
agent.channels = c1
agent.sinks = k1

agent.sources.src-1.type = spooldir
agent.sources.src-1.channels = c1
agent.sources.src-1.spoolDir = /home/Documents/id/
agent.sources.src-1.deserializer=org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder
agent.sources.src-1.fileHeader=true
agent.channels.c1.type = file
agent.sources.src-1.basenameHeader=true
agent.sources.src-1.basenameHeaderKey=basename

agent.sinks.k1.type = hdfs
agent.sinks.k1.channel = c1
agent.sinks.k1.hdfs.path =hdfs://localhost:8020/user/flume/events/
agent.sinks.k1.hdfs.filePrefix = %{basename}
agent.sinks.k1.hdfs.fileHeader = true
agent.sinks.k1.hdfs.fileType = DataStream

我的hdfs文件格式如下:

  

/flume/events/file1.txt.1411543838171   /flume/events/file2.txt.1411544272696

我想知道我可以删除为文件名的每个事件自动生成的时间戳(1411543838171)/唯一号码吗?

1 个答案:

答案 0 :(得分:2)

似乎无法仅通过使用配置来删除时间戳。如果你看一下HDFS Sink的工作原理,你会发现以下内容:

set {...}

long counter = fileExtensionCounter.incrementAndGet(); String fullFileName = fileName + "." + counter; fileExtensionCounter

的位置

您可以为作者查看接收器herehere的代码。

如果您想要做的是将更多事件放在一个文件中,那么您可以查看接收器属性

  • fileExtensionCounter = new AtomicLong(clock.currentTimeMillis());
  • rollTime
  • rollSize
  • rollCount