2013-12-17 13 views
6

Podążyłem za link w celu ustawienia zlewu TwitterSource i HDFS.Flume nie zapisuje do HDFS, chyba że zostanie zabity

poleceń używany do uruchamiania agenta:

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

I udało się to robić, ale jest jeden problem teraz. Dane wyjściowe nie są zapisywane do momentu zatrzymania środka flume. Zostaje napisany do HDFS, kiedy zabiję mojego agenta flume.

Mam dwa pytania tutaj:

1) Jak zatrzymać środek flume - Czy jest jakiś inny sposób niż robią CTRL + C.

2) Czy mogę dokonać zapisu przez flume-agent na HDFS w ruchu, bez konieczności zabijania agenta.

Uwaga: po zabiciu procesu zapisany plik ma rozszerzenie .tmp. Czy to jest oczekiwane?

EDIT:

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

Odpowiedz

7

Ile danych napisany jest uzyskiwanie? Założę się, że nie pisał, ponieważ nie zebrałeś wystarczająco dużo, aby uruchomić spłukiwanie do HDFS z domyślnymi parametrami konfiguracyjnymi. Istnieje number of ways to configure the HDFS sink, dzięki czemu spłukuje się w przewidywalny sposób. Można go ustawić tak, aby opróżniał wiele zdarzeń (hdfs.rollCount), w przedziale (hdfs.rollInterval) lub w rozmiarze (hdfs.rollSize). To, co się dzieje, kiedy zabijasz agenta, czyści to, co aktualnie robi, i opróżnia się ... więc w zasadzie wymuszasz to, zabijając go. Można również spróbować obniżyć .

Pamiętaj, że Hadoop lubi większe pliki. Powinieneś unikać ogólnie wielu małych plików. Uważaj więc na zbyt częste toczenie.


Uruchamiając go na pierwszym planie, tak jak ty, ctrl + c lub kill są jedynymi realnymi sposobami, aby temu zapobiec. Podczas produkcji prawdopodobnie powinieneś używać skryptów startowych, które mają start/stop/restart.

+0

Dzięki, że to wszystko tłumaczy. Zmieniłem moje pytanie za pomocą parametrów rolki. Mój rollCount wynosi 10000, a rollInterval wynosi 600. Spróbuję zmniejszyć te wartości i spróbować ponownie. :) –

+0

Chcę utworzyć pojedynczy plik dziennie, więc nie mogę używać zasad roll, ale mój batchSize to 1 i nadal mam problemy z OP. Oto moje konfiguracje ról: round = true, roundValue = 1, roundUnit = day, rollInterval = 0, rollSize = 0, rollCount = 0. Co mogę zrobić, aby wypuścić do HDFS w każdym wydarzeniu? – ffleandro

1

Dziękuję Donald i praveen:

mogę rozwiązać ten problem przez ustawienie następujących w moim pliku koryta-conf

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

i usuwając ten wpis

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600 

Teraz flume pisze do HDFS w podróży.

Powiązane problemy