Używam aplikacji strumieniowej Spark z 2 pracownikami. Aplikacja ma operacje łączenia i łączenia.Jak zoptymalizować wyciek losowy w aplikacji Apache Spark
Wszystkie partie zakończyły się pomyślnie, ale zauważyliśmy, że metryki losowego rozlewania nie są zgodne z rozmiarem danych wejściowych ani wielkością danych wyjściowych (pojemność pamięci jest większa niż 20 razy).
Proszę znaleźć szczegóły sceniczne iskra w poniższy obrazek:
Po zbadaniu tej sprawie, uznał, że
Shuffle rozlanie się dzieje, gdy nie ma wystarczającej ilości pamięci dla danych shuffle.
Shuffle spill (memory)
- rozmiar rozszeregować postaci danych w pamięci w czasie przechodzenia
shuffle spill (disk)
- rozmiar odcinkach postaci danych na dysku po przechodzeniu
Ponieważ rozszeregować danych zajmuje więcej miejsca niż serializowane dane. Tak więc, Shuffle spill (memory) jest czymś więcej.
Zauważono, że ten rozmiar rozlanej pamięci jest niesamowicie duży z dużymi danymi wejściowymi.
Moje pytania są następujące:
robi to wycieki znacznie wpływa na wydajność?
Jak zoptymalizować to rozlewając zarówno pamięć, jak i dysk?
Czy istnieją właściwości Spark, które mogą zmniejszyć/kontrolować to ogromne wycieki?
@mitchus Częściowo Tak, właśnie zwiększyłem liczbę zadań i przydzielono więcej pamięci frakcji do przetasowania. Zoptymalizowałem też mój kod, aby skompaktować rozmiar struktury danych ... –