flume hdfs sink:从文件名中删除时间戳

xdnvmnnf  于 2021-06-04  发布在  Flume
关注(0)|答案(1)|浏览(394)

我已经为我的应用程序配置了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)/唯一的数字,这是自动生成的每个事件的文件名?

yhuiod9q

yhuiod9q1#

仅仅使用配置似乎不可能删除时间戳。如果您了解hdfs接收器的工作原理,您将发现以下内容:

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

哪里 fileExtensionCounterfileExtensionCounter = new AtomicLong(clock.currentTimeMillis()); 你可以在这里检查Flume的代码,在这里检查书写器的代码。
如果要在单个文件中放置更多事件,那么可以查看接收器属性
rollTime rollSize rollCount batchSize

相关问题