2015-11-20 18 views
5

Ho configurato agente canale artificiale per la mia domanda, in cui origine è Spooldir e lavandino è HDFSFlume HDFS affondare: Rimuovere timestamp dal nome del file

sono in grado di raccogliere i file in HDFS.

configurazione dell'agente è:

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 

Ho dei file HDFS come di seguito formato:

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

Voglio sapere Posso rimuovere il timestamp (1411543838171)/numero univoco che viene generato automaticamente per ogni evento per il file nome?

risposta

2

Non sembra possibile rimuovere il timestamp semplicemente utilizzando la configurazione. Se si dispone di uno sguardo a come si lavora HDFS Sink trovate le seguenti:

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

Dove fileExtensionCounter è fileExtensionCounter = new AtomicLong(clock.currentTimeMillis());

È possibile controllare il codice per il lavandino e herehere per lo scrittore.

Se ciò che si vuole fare è mettere più eventi in un unico file, allora si può avere uno sguardo ai proprietà lavandino

  • rollTime
  • rollSize
  • rollCount
  • batchSize
Problemi correlati