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żej typowych scenariuszy można napotkać
- 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 innych firm
- 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ą:
- Jak są przechowywane dane
- 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 za mało zadań
- Niesymetryczność danych spowodowała kilka ciężkich zadań lub wolnych zadań
- Zadania wolniejsze w nieprawidłowych węzłach
Krok 1. Sprawdzanie, czy usługa Yarn 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 > : W pozycji Uruchomiono powinien znajdować się wszystkie węzły NodeManager, 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 jakiekolwiek wyjątki lub błędy w dzienniku usługi ResourceManager
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log
Zobacz więcej informacji w temacie Typowe problemy z usługą Yarn
Krok 2. Porównanie nowych zasobów aplikacji z dostępnymi zasobami usługi yarn
Przejdź do pozycji Podsumowanie YARN >interfejsu > użytkownika systemu Ambari, sprawdź PAMIĘĆ KLASTRA w obszarze ServiceMetrics
Sprawdź metryki kolejki usługi yarn w szczegółach:
- Przejdź do interfejsu użytkownika usługi Yarn, sprawdź metryki harmonogramu usługi Yarn za pomocą polecenia
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
- Alternatywnie możesz sprawdzić metryki harmonogramu yarn 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.
- Oblicz łączną ilość 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 nowe zasoby całkowite aplikacji z dostępnymi zasobami usługi yarn 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 działa wolno
- Czy łączna liczba rdzeni wirtualnych procesora CPU jest w pełni wykorzystywana na karcie Oś czasu zdarzeń na karcie Etap
- Jeśli używasz języka spark sql, jaki jest plan fizyczny na karcie SQL
- Czy skierowany graf acykliczny nie 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.partitions
domyślnie ma wartość 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 korzystania ze źródeł opartych na plikach, takich jak Parquet, JSON i ORC. - AQE na platformie Spark 3.0. Zobacz Wykonywanie zapytań adaptacyjnych