2016-04-10 9 views
5

Tak więc uruchamiamy iskrownik, który wyodrębnia dane i dokonuje rozległej konwersji danych i zapisuje je w kilku różnych plikach. Wszystko działa dobrze, ale dostaję losowe ekspansywne opóźnienia między zakończeniem pracochłonnych zasobów i rozpoczęciem kolejnego zadania.Spark: długie opóźnienie między zadaniami

Na poniższym zdjęciu widzimy, że praca zaplanowana na 17:22:02 zajęła 15 minut, aby zakończyć, co oznacza, że ​​spodziewam się, że następna praca zostanie zaplanowana około 17:37:02. Jednak kolejna praca została zaplanowana na 22:05:59, czyli +4 godziny po powodzeniu pracy.

Kiedy przekopię się do interfejsu iskier następnego zlecenia, pokazuje on opóźnienie harmonogramu 1 sekundę 1 sekunda. Jestem więc zdezorientowany, skąd pochodzi to 4-godzinne opóźnienie.

enter image description here

(Spark 1.6.1 z Hadoop 2)

Aktualizacja:

Mogę potwierdzić, że odpowiedź Dawida poniżej jest na miejscu o jak ops IO są obsługiwane w Spark jest nieco niespodziewany. (Sensowne jest to, że plik zapisuje w zasadzie "zbiera" za kurtyną, zanim napisze o zamawianiu i/lub innych operacjach.) Ale jestem trochę nieswojo z powodu, że czas wejścia/wyjścia nie jest zawarty w czasie wykonywania zlecenia. Wydaje mi się, że widzisz to w zakładce "SQL" interfejsu iskrownika, ponieważ zapytania wciąż działają, nawet jeśli wszystkie zadania są skuteczne, ale w ogóle nie możesz się na nie zagłębić.

Jestem pewien, że istnieje więcej sposobów na poprawę, ale poniżej dwie metody były wystarczające dla mnie:

  1. zmniejszyć liczbę plików
  2. ustawiony parquet.enable.summary-metadata fałszywych
+0

może to być po prostu bug iskra UI? Czy ukończenie trwa tak długo? – marios

+0

Nie wydaje się tak. Kiedy złapię gromadę w stanie zawieszenia, dosłownie nic się nie dzieje. – codingtwinky

+0

Czy wystąpiły usterki executora/pracownika w czasie, gdy zadanie 15min zostało zakończone? Jeśli tak, a system jako przeciążony, może się zdarzyć, że system operacyjny po prostu zabrał dużo czasu, aby doprowadzić do następnego executora/pracownika (z powodu ograniczonych zasobów systemowych). – marios

Odpowiedz

8

operacji I/O często pochodzą ze znacznym obciążeniem, które wystąpi na głównym węźle. Ponieważ ta praca nie jest zrównoleglona, ​​może to zająć trochę czasu. A ponieważ nie jest to praca, nie pojawia się w interfejsie menedżera zasobów. Niektóre przykłady zadań I/O, które są wykonywane przez węzeł nadrzędny

  • Spark napisze do tymczasowych s3 katalogów, a następnie przenieść pliki za pomocą węzła głównego
  • odczyt plików tekstowych często występują na węźle głównym
  • przy zapisie plików parkietem, węzeł nadrzędny będzie skanować wszystkie pliki post-write, aby sprawdzić schemat

te kwestie mogą być rozwiązane przez szczypanie ustawienia przędzy lub przebudowy kodu. Jeśli podasz jakiś kod źródłowy, być może uda mi się wskazać Twój problem.

Discussion of writing I/O Overhead

Discussion of reading I/O Overhead

+0

Jesteś moim ulubionym! Muszę jeszcze potwierdzić, ale bazując na tym, co czytam i zachowaniu, wydaje mi się, że jest na miejscu. Dzięki stary! – codingtwinky