2013-12-17 9 views
6

Ho seguito il link per l'impostazione di sink di TwitterSource e HDFS.Flume non scrive su HDFS a meno che non venga ucciso

comando usato per avviare l'agente:

bin/flume-ng agent -n TwitterAgent -c conf -f conf/flume-conf.properties -Dflume.root.logger=DEBUG,console 

ero riuscito a fare questo, ma c'è un problema ora. L'output non viene scritto finché non si interrompe l'agente flume. Viene scritto sull'HDFS una volta che uccido il mio agente flume.

ho due domande qui:

1) come fermare un agente di canale artificiale - c'è un modo diverso di fare CTRL + C.

2) Posso fare in modo che il flume-agent scriva sull'HDFS in movimento, senza dover uccidere l'agente.

Nota: dopo aver ucciso il processo, il file che è scritto ha estensione .tmp. È previsto?

EDIT:

TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000 
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600 

risposta

7

Quanti dati sta ottenendo scritto? Scommetto che non sta scrivendo perché non hai raccolto abbastanza per attivare un flusso di HDFS con i parametri di configurazione predefiniti. C'è un number of ways to configure the HDFS sink in modo che si svuota in un modo prevedibile. È possibile impostarlo in modo che funzioni su un numero di eventi (hdfs.rollCount), su un intervallo (hdfs.rollInterval) o su un formato (hdfs.rollSize). Quello che sta succedendo è quando uccidi l'agente, pulisce ciò che sta facendo attualmente e scarica ... quindi in pratica lo stai forzando uccidendolo.

È inoltre possibile provare a ridurre hdfs.batchSize.

Ricorda che a Hadoop piacciono i file più grandi. Dovresti cercare di evitare molti piccoli file, in generale. Quindi stai attento qui a rotolare troppo spesso.


Eseguendolo in primo piano come sei, ctrl + c o uccisione sono gli unici veri modi per fermarlo. In produzione probabilmente dovresti usare gli script di init, che hanno start/stop/restart.

+0

Grazie, questo spiega tutto ciò che immagino. Ho modificato la mia domanda con i parametri del rotolo. Il mio rollCount è 10000 e rollInterval è 600. Proverò a ridurre questi valori e riprovare. :) –

+0

Voglio creare un singolo file al giorno, quindi non posso usare le politiche di roll, ma il mio batchSize è 1 e ottengo ancora i problemi di OP. Queste sono le configurazioni del mio rotolo: round = true, roundValue = 1, roundUnit = day, rollInterval = 0, rollSize = 0, rollCount = 0. Cosa posso fare per scaricare su HDFS in ogni evento? – ffleandro

1

Grazie Paperino e Praveen:

ho potuto risolvere il problema impostando la seguente nel mio file flume-conf

TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000 
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000 

e cancellando questa voce

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600 

Ora flume sta scrivendo su HDFS in movimento.