Udostępnij przez


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

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

  1. 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.
  1. Sprawdź, czy interfejs użytkownika usługi Yarn jest dostępny za pośrednictwem https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster

  2. Sprawdź, 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

  1. Przejdź do interfejsu użytkownika systemu Ambari > YARN > PODSUMOWANIE, sprawdź PAMIĘĆ KLASTRA w obszarze ServiceMetrics

  2. 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.
  1. 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 i spark.driver.cores
    • W trybie klienta użyj polecenia spark.yarn.am.memory+spark.yarn.am.memoryOverhead i spark.yarn.am.cores

Uwaga

yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb

  1. Porównaj całkowite zasoby nowej aplikacji z dostępnymi zasobami YARN w określonej kolejce.

Krok 3. Śledzenie aplikacji spark

  1. Monitorowanie uruchomionej aplikacji spark za pomocą interfejsu użytkownika platformy Spark

  2. Monitorowanie kompletnej lub niekompletnej aplikacji spark za pomocą interfejsu użytkownika serwera historii platformy 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 partycji Spark SQL

  • spark.sql.shuffle.partitions domyślnie ma wartość 200. Możemy dostosować się w oparciu o potrzeby biznesowe podczas przestawiania danych dla łączenia 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 w Spark 3.0. Zobacz Wykonywanie zapytań adaptacyjnych

Następne kroki