2015-11-20 72 views
5

我已经配置水槽代理我的应用程序,其中source是Spooldir和接收器是HDFS水槽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)/每个文件事件自动生成的唯一编号名称?

回答

2

仅通过使用配置似乎不可能删除时间戳。如果你看一下HDFS水槽是如何工作的,你会发现以下内容:

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

哪里fileExtensionCounterfileExtensionCounter = new AtomicLong(clock.currentTimeMillis());

您可以检查代码水槽herehere的作家。

如果你想要做的就是把更多的事件在一个单一的文件是什么,那么你可以看看沉性质

  • rollTime
  • rollSize
  • rollCount
  • batchSize