Próbuję pobrać jakieś dane z HDFS. Używam do tego procesora listHDFS i fetchHDFS.

Kiedy zatrzymałem procesor fetchHDFS, było wiele aktywnych wątków nawet po zatrzymaniu procesora. Aby zabić te wątki, użyłem opcji „zakończ”.

Chciałem tylko poznać działanie opcji zakończenia.

  1. Czy wdzięcznie zamyka wszystkie połączenia z FS?
  2. Ponieważ wszystkie wątki są zabijane, czy stracę dane, które zostały przez nie zużyte?
  3. Czy zalecana jest opcja zakończenia tylko wtedy, gdy wątki są zablokowane lub przepływ przechodzi w stan zamrożony?
2
mythic 26 listopad 2018, 10:21

1 odpowiedź

Najlepsza odpowiedź

Kiedy zatrzymasz procesor, mówi on frameworkowi NiFi, aby nie planował/wykonywał już procesora, ale mogą już być wykonywane wątki, które muszą dokończyć to, co robiły. Zwykle te wątki powinny się zakończyć i zobaczysz, że aktywne wątki znikają, ale czasami wątek jest blokowany (zwykle podczas próby nawiązania połączenia sieciowego gdzieś bez ustawionego odpowiedniego limitu czasu) i ten wątek może nigdy się nie zakończyć i dlatego musi zostać zakończony .

Opcjatermin spowoduje przerwanie wątku, a następnie poddanie go kwarantannie, co spowoduje usunięcie go z puli w celu dalszego wykonania. Wątek może wtedy zakończyć pracę w tle lub jeśli nie zareaguje na przerwanie i zostanie zablokowany, może utknąć w tle do następnego restartu NiFi.

W przypadku FetchHDFS, zakładając, że pomyślnie pobierał dane, najprawdopodobniej znajdował się w trakcie odczytu pliku z HDFS i potrzebował tylko kilku minut na ukończenie i nie powinien wymagać zakończenia. Jeśli nigdy nie pobierał danych i utknął podczas łączenia się z HDFS, użyjesz zakończenia.

2
Bryan Bende 27 listopad 2018, 17:00