2013-12-17 9 views
6

Ich folgte der link für die Einstellung TwitterSource und HDFS sinken.Flume nicht auf HDFS schreiben, wenn getötet

Befehl zum Starten des Agenten verwendet:

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

Ich war erfolgreich, dass in zu tun, aber es ist jetzt ein Problem. Der Ausgang wird nicht geschrieben, bis der Kanal gestoppt wird. Es wird in die HDFS geschrieben, sobald ich meinen Flume Agent töte.

Ich habe zwei Fragen hier:

1) Wie ein Gerinne Mittel zu stoppen - Gibt es eine Möglichkeit andere als C STRG + tun.

2) Kann ich den Flume-Agent auf dem Weg zum HDFS schreiben lassen, ohne den Agenten zu töten?

Hinweis: Nach dem Beenden des Prozesses hat die Datei, die geschrieben wird, .tmp als Erweiterung. Wird es erwartet?

EDIT:

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

Antwort

7

Wie viele Daten geschrieben zu werden? Ich wette, es ist nicht schreiben, weil Sie nicht genug gesammelt haben, um eine Flush zu HDFS mit den Standardkonfigurationsparametern auszulösen. Es gibt eine number of ways to configure the HDFS sink, so dass es auf eine vorhersehbare Art und Weise spült. Sie können festlegen, dass eine Anzahl von Ereignissen (hdfs.rollCount), ein Intervall (hdfs.rollInterval) oder eine Größe (hdfs.rollSize) gelöscht wird. Was passiert, wenn man den Agenten tötet, räumt er auf, was er gerade tut und er spült ... also im Grunde zwingt man ihn, indem man ihn tötet.

Sie können auch versuchen, hdfs.batchSize zu senken.

Denken Sie daran, dass Hadoop größere Dateien mag. Sie sollten versuchen, viele kleine Dateien im Allgemeinen zu vermeiden. Also sei hier vorsichtig, wenn du zu oft rollst.

Wenn Sie es im Vordergrund ausführen, wie Sie sind, sind Strg + C oder Kill die einzigen wirklichen Möglichkeiten, es zu stoppen. In der Produktion sollten Sie wahrscheinlich die Init-Skripte verwenden, die start/stop/restart haben.

+0

Danke, das erklärt alles, denke ich. Ich habe meine Frage mit den Roll-Parametern bearbeitet. Mein RollCount ist 10000 und rollInterval ist 600. Ich werde versuchen, diese Werte zu reduzieren und es erneut versuchen. :) –

+0

Ich möchte eine einzelne Datei pro Tag erstellen, so dass ich die Roll-Richtlinien nicht verwenden kann, aber meine BatchSize ist 1 und ich bekomme immer noch die OP-Probleme. Dies sind meine Roll-Konfigurationen: round = true, roundValue = 1, roundUnit = Tag, rollInterval = 0, rollSize = 0, rollCount = 0.Was kann ich tun, um in jedem Ereignis auf HDFS zu spülen? – ffleandro

1

Danke Donald und Praveen:

ich das Problem, indem Sie die folgenden in meinem Gerinne-conf Datei

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

und durch das Löschen diesen Eintrag Gerinne

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600 

Jetzt lösen könnte schreibt unterwegs auf HDFS.