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