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.
Ten artykuł zawiera omówienie strategii optymalizacji aplikacji platformy Apache Spark w usłudze Azure HDInsight.
Omówienie
Możesz napotkać poniższe typowe scenariusze.
- To samo zadanie Spark wykonuje się wolniej niż wcześniej w tym samym klastrze usługi HDInsight.
- Zadanie Spark jest wolniejsze w klastrze HDInsight niż w środowisku lokalnym lub u innych dostawców usług.
- 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 obciążających zadań lub powolnych 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 YARN > PODSUMOWANIE: Wszystkie węzły NodeManager powinny znajdować się w pozycji Uruchomiono, a tylko aktywny Menedżer zasobów powinien znajdować się w pozycji Uruchomiono.
Sprawdź, czy interfejs użytkownika usługi Yarn jest dostępny za pośrednictwem
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/clusterSprawdź, czy występują 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ównaj nowe zasoby aplikacji z dostępnymi zasobami Yarn
Przejdź do interfejsu użytkownika systemu Ambari > YARN > PODSUMOWANIE, sprawdź PAMIĘĆ KLASTRA w obszarze ServiceMetrics
Sprawdź metryki kolejki yarn szczegółowo.
- 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 Yarn. Na przykład
curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler". W przypadku ESP 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.memoryispark.driver.cores - W trybie klienta użyj polecenia
spark.yarn.am.memory+spark.yarn.am.memoryOverheadispark.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 całkowite zasoby nowej aplikacji z dostępnymi zasobami 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 całkowita liczba rdzeni wirtualnych procesora CPU jest w pełni wykorzystywana w zakładce "Oś czasu zdarzeń" w zakładce Etap
- Jeśli używasz Spark SQL, jaki jest fizyczny plan na zakładce SQL?
- Czy DAG jest zbyt długi na jednym etapie?
- Obserwuj metryki zadań (rozmiar danych wejściowych, rozmiar zapisu shuffle, czas GC) na karcie Scena
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.partitionsdomyślnie ma wartość 200. Możemy dostosować się w oparciu o potrzeby biznesowe podczas przestawiania danych dla łączenia lub agregacji. -
spark.sql.files.maxPartitionBytesjest 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 w Spark 3.0. Zobacz Wykonywanie zapytań adaptacyjnych