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.
(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:
- zmniejszyć liczbę plików
- ustawiony
parquet.enable.summary-metadata
fałszywych
może to być po prostu bug iskra UI? Czy ukończenie trwa tak długo? – marios
Nie wydaje się tak. Kiedy złapię gromadę w stanie zawieszenia, dosłownie nic się nie dzieje. – codingtwinky
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