Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule omówiono sposób optymalizacji konfiguracji klastra Apache Spark w celu uzyskania najlepszej wydajności w usłudze Azure HDInsight.
Przegląd
W zależności od obciążenia klastra Spark można określić, że nie domyślna konfiguracja platformy Spark spowoduje bardziej zoptymalizowane wykonywanie zadań platformy Spark. Przetestuj testy porównawcze z przykładowymi obciążeniami, aby zweryfikować wszystkie konfiguracje klastra inne niż domyślne.
Poniżej przedstawiono kilka typowych parametrów, które można dostosować:
| Parametr | Opis |
|---|---|
| --num-executors | Ustawia odpowiednią liczbę funkcji wykonawczych. |
| --executor-cores | Ustawia liczbę rdzeni dla każdego wykonawcy. Zazwyczaj powinny istnieć funkcje wykonawcze średniej wielkości, ponieważ inne procesy zużywają część dostępnej pamięci. |
| --executor-memory | Ustawia rozmiar pamięci dla każdego modułu wykonawczego, który kontroluje rozmiar sterty w usłudze YARN. Pozostaw trochę pamięci na potrzeby obciążenia związanego z wykonywaniem. |
Wybierz prawidłowy rozmiar wykonawcy
Podczas podejmowania decyzji o konfiguracji funkcji wykonawczej należy wziąć pod uwagę obciążenie odzyskiwania pamięci w języku Java (GC).
Czynniki mające na celu zmniejszenie rozmiaru funkcji wykonawczej:
- Zmniejsz rozmiar sterty poniżej 32 GB, aby utrzymać obciążenie < GC 10%.
- Zmniejsz liczbę rdzeni, aby utrzymać obciążenie GC na poziomie < mniej niż 10%.
Czynniki zwiększające rozmiar funkcji wykonawczej:
- Zmniejszanie obciążenia związanego z komunikacją między funkcjami wykonawczych.
- Zmniejsz liczbę otwartych połączeń między funkcjami wykonawczych (N2) w większych klastrach (>100 funkcji wykonawczych).
- Zwiększ rozmiar sterty, aby poradzić sobie z zadaniami wymagającymi dużej ilości pamięci.
- Opcjonalnie: Zmniejsz obciążenie pamięci na wykonawcę.
- Opcjonalnie: Zwiększ użycie i współbieżność przez przeciążenie procesora.
Ogólnie rzecz biorąc, podczas wybierania rozmiaru funkcji wykonawczej:
- Zacznij od 30 GB na wykonawcę i rozdziel dostępne rdzenie maszyny.
- Zwiększ liczbę rdzeni funkcji wykonawczej dla większych klastrów (> 100 funkcji wykonawczych).
- Zmodyfikuj rozmiar na podstawie przebiegów próbnych i na podstawie czynników, takich jak obciążenie związane z GC.
Podczas uruchamiania zapytań współbieżnych należy wziąć pod uwagę następujące kwestie:
- Zacznij od 30 GB na wykonawcę i wszystkie rdzenie maszyny.
- Tworzenie wielu równoległych aplikacji Spark przez nadmierne wykorzystywanie zasobów CPU (poprawa opóźnienia o około 30%).
- Dystrybuuj zapytania w aplikacjach równoległych.
- Zmodyfikuj rozmiar na podstawie przebiegów próbnych i na poprzednich czynnikach, takich jak obciążenie GC.
Aby uzyskać więcej informacji na temat konfigurowania funkcji wykonawczych przy użyciu narzędzia Ambari, zobacz Ustawienia platformy Apache Spark — funkcje wykonawcze platformy Spark.
Monitoruj wydajność zapytań pod kątem wartości odstających lub innych problemów z wydajnością, korzystając z widoku osi czasu. Ponadto graf SQL, statystyki zadań itd. Aby uzyskać informacje na temat debugowania zadań platformy Spark przy użyciu usługi YARN i serwera historii platformy Spark, zobacz Debugowanie zadań platformy Apache Spark uruchomionych w usłudze Azure HDInsight. Aby uzyskać porady dotyczące korzystania z YARN Timeline Server, zobacz Dostęp do logów aplikacji Apache Hadoop YARN.
Zadania wolniejsze w niektórych funkcjach wykonawczych lub węzłach
Czasami jedna lub kilka funkcji wykonawczych jest wolniejszych niż inne, a wykonywanie zadań trwa znacznie dłużej. To spowolnienie często występuje w większych klastrach (> 30 węzłów). W takim przypadku podziel pracę na większą liczbę zadań, aby harmonogram mógł zrekompensować wolne zadania. Na przykład, liczba zadań powinna być co najmniej dwa razy większa niż liczba rdzeni wykonawczych w aplikacji. Można również włączyć spekulacyjne wykonywanie zadań za pomocą polecenia conf: spark.speculation = true.