Optymalizowanie aplikacji platformy Apache Spark w usłudze HDInsight
Ten artykuł zawiera omówienie strategii optymalizacji aplikacji Platformy Apache Spark w usłudze Azure HDInsight.
Omówienie
Poniższe typowe scenariusze mogą wystąpić
- To samo zadanie spark działa wolniej niż wcześniej w tym samym klastrze usługi HDInsight
- Zadanie platformy Spark jest wolniejsze w klastrze usługi HDInsight niż lokalny lub inny dostawca usług innej firmy
- Zadanie spark działa wolniej w jednym klastrze usługi HDI niż w innym klastrze usługi HDI
Wydajność zadań platformy Apache Spark zależy od wielu czynników. Te czynniki wydajności obejmują:
- Sposób przechowywania danych
- Jak skonfigurowano klaster
- Operacje używane podczas przetwarzania danych.
- Usługa przędzy w złej kondycji
- Ograniczenia pamięci spowodowane niewłaściwym rozmiarem funkcji wykonawczych i OutOfMemoryError
- Zbyt wiele zadań lub zbyt mało zadań
- Niesymetryczność danych spowodowała kilka ciężkich zadań lub powolnych zadań
- Zadania wolniejsze w nieprawidłowych węzłach
Krok 1. Sprawdzanie, czy usługa przędzy jest w dobrej kondycji
- Przejdź do interfejsu użytkownika systemu Ambari:
- Sprawdzanie, czy alerty usługi ResourceManager lub NodeManager
- Sprawdź stan ResourceManager i NodeManager w podsumowaniu usługi YARN > : Wszystkie węzłyManager powinny znajdować się w obszarze Uruchomiono, a w obszarze Uruchomiono powinien znajdować się tylko aktywny menedżer zasobów
Sprawdź, czy interfejs użytkownika usługi Yarn jest dostępny za pośrednictwem
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster
Sprawdź, czy w dzienniku usługi ResourceManager występują wyjątki lub błędy
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log
Zobacz więcej informacji na temat typowych problemów z usługą Yarn
Krok 2. Porównanie nowych zasobów aplikacji z dostępnymi zasobami przędzy
Przejdź do pozycji Podsumowanie YARN > interfejsu > użytkownika systemu Ambari, sprawdź PAMIĘĆ KLASTRA w metrykach usługi
Sprawdź metryki kolejki przędzy w szczegółach:
- Przejdź do interfejsu użytkownika usługi Yarn, sprawdź metryki harmonogramu usługi Yarn za pośrednictwem
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
- Alternatywnie możesz sprawdzić metryki harmonogramu przędzy za pomocą interfejsu API REST usługi Yarn. Na przykład
curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler"
. W przypadku rejestracji należy użyć użytkownika administratora domeny.
- Obliczanie łącznych zasobów dla nowej aplikacji
- Wszystkie zasoby funkcji wykonawczej:
spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores
. Zobacz więcej informacji w konfiguracji funkcji wykonawczej platformy Spark - ApplicationMaster
- W trybie klastra użyj polecenia
spark.driver.memory
ispark.driver.cores
- W trybie klienta użyj polecenia
spark.yarn.am.memory+spark.yarn.am.memoryOverhead
ispark.yarn.am.cores
- W trybie klastra użyj polecenia
Uwaga
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- Porównaj łączną ilość zasobów nowej aplikacji z dostępnymi zasobami w określonej kolejce
Krok 3. Śledzenie aplikacji spark
Musimy zidentyfikować poniższe objawy za pomocą interfejsu użytkownika platformy Spark lub interfejsu użytkownika historii platformy Spark:
- Który etap jest powolny
- Czy łączna liczba rdzeni wirtualnych procesora CPU jest w pełni wykorzystywana w Event-Timeline na karcie Etap
- Jeśli używasz języka spark sql, jaki jest plan fizyczny na karcie SQL
- Czy daG jest zbyt długi na jednym etapie
- Obserwowanie metryk zadań (rozmiar danych wejściowych, rozmiar zapisu shuffle, czas GC) na karcie Etap
Zobacz więcej informacji w temacie Monitorowanie aplikacji platformy Spark
Krok 4. Optymalizowanie aplikacji spark
Istnieje wiele optymalizacji, które mogą pomóc w pokonaniu tych wyzwań, takich jak buforowanie i umożliwienie niesymetryczności danych.
W każdym z poniższych artykułów można znaleźć informacje na temat różnych aspektów optymalizacji platformy Spark.
- Optymalizowanie magazynu danych dla platformy Apache Spark
- Optymalizowanie przetwarzania danych dla platformy Apache Spark
- Optymalizowanie użycia pamięci dla platformy Apache Spark
- Optymalizowanie konfiguracji klastra usługi HDInsight dla platformy Apache Spark
Optymalizowanie partycji Spark SQL
-
spark.sql.shuffle.paritions
domyślnie jest to 200. Możemy dostosować się na podstawie potrzeb biznesowych podczas mieszania danych dla sprzężeń lub agregacji. -
spark.sql.files.maxPartitionBytes
jest domyślnie 1G w usłudze HDI. Maksymalna liczba bajtów do spakowania w jedną partycję podczas odczytywania plików. Ta konfiguracja jest skuteczna tylko w przypadku używania źródeł opartych na plikach, takich jak Parquet, JSON i ORC. - AQE na platformie Spark 3.0. Zobacz Wykonywanie zapytań adaptacyjnych