Apache Spark-toepassingen optimaliseren in HDInsight

Dit artikel bevat een overzicht van strategieën voor het optimaliseren van Apache Spark-toepassingen in Azure HDInsight.

Overzicht

U kunt te maken krijgen met onderstaande veelvoorkomende scenario's

  • Dezelfde Spark-taak is langzamer dan voorheen in hetzelfde HDInsight-cluster
  • De Spark-taak is langzamer in het HDInsight-cluster dan on-premises of een andere externe serviceprovider
  • De Spark-taak is langzamer in het ene HDI-cluster dan in een ander HDI-cluster

De prestaties van uw Apache Spark-taken zijn afhankelijk van meerdere factoren. Deze prestatiefactoren zijn onder andere:

  • Hoe uw gegevens worden opgeslagen
  • Hoe het cluster is geconfigureerd
  • De bewerkingen die worden gebruikt bij het verwerken van de gegevens.
  • Beschadigde yarn-service
  • Geheugenbeperkingen vanwege uitvoerders met een onjuist formaat en OutOfMemoryError
  • Te veel of te weinig taken
  • Scheeftrekken van gegevens veroorzaakten enkele zware taken of trage taken
  • Taken langzamer in beschadigde knooppunten

Stap 1: Controleren of uw yarn-service in orde is

  1. Ga naar de Ambari-gebruikersinterface:
  • Controleren of ResourceManager- of NodeManager-waarschuwingen
  • Controleer de status van ResourceManager en NodeManager in YARN-SAMENVATTING > : Alle NodeManager moet in Gestart staan en alleen Actieve ResourceManager in Gestart
  1. Controleren of de Yarn-gebruikersinterface toegankelijk is via https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster

  2. Controleer of er uitzonderingen of fouten zijn in het ResourceManager-logboek /var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log

Zie Veelvoorkomende problemen met Yarn voor meer informatie

Stap 2: Uw nieuwe toepassingsresources vergelijken met beschikbare yarn-resources

  1. Ga naar overzicht van Ambari UI > YARN>, controleer clustergeheugen in ServiceMetrics

  2. Controleer de metrische gegevens van de yarn-wachtrij in detail:

  • Ga naar de Yarn-gebruikersinterface, controleer de metrische gegevens van Yarn scheduler via https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
  • U kunt ook de metrische gegevens van yarn scheduler controleren via de Yarn REST API. Bijvoorbeeld curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler". Voor ESP moet u domeinbeheerder gebruiken.
  1. Het totale aantal resources voor uw nieuwe toepassing berekenen
  • Alle uitvoerresources: spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores. Zie Configuratie van Spark-uitvoerders voor meer informatie
  • ApplicationMaster
    • In de clustermodus gebruikt u spark.driver.memory en spark.driver.cores
    • In de clientmodus gebruikt u spark.yarn.am.memory+spark.yarn.am.memoryOverhead en spark.yarn.am.cores

Notitie

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

  1. Vergelijk het totale aantal resources van uw nieuwe toepassing met beschikbare yarn-resources in de opgegeven wachtrij

Stap 3: Uw Spark-toepassing bijhouden

  1. Uw actieve Spark-toepassing bewaken via de Spark-gebruikersinterface

  2. Uw volledige of onvolledige Spark-toepassing bewaken via de gebruikersinterface van Spark History Server

We moeten de onderstaande symptomen identificeren via de Spark-gebruikersinterface of de gebruikersinterface van Spark-geschiedenis:

  • Welke fase is traag
  • Zijn de totale cpu-v-cores van de uitvoerder volledig gebruikt in Event-Timeline op het tabblad Fase
  • Als u Spark SQL gebruikt, wat is het fysieke plan op het tabblad SQL
  • Is DAG te lang in één fase
  • Bekijk de metrische gegevens van taken (invoergrootte, willekeurige schrijfgrootte, GC-tijd) op het tabblad Fase

Zie Uw Spark-toepassingen bewaken voor meer informatie

Stap 4: Uw Spark-toepassing optimaliseren

Er zijn veel optimalisaties die u kunnen helpen deze uitdagingen te overwinnen, zoals caching en het toestaan van scheeftrekken van gegevens.

In elk van de volgende artikelen vindt u informatie over verschillende aspecten van Spark-optimalisatie.

Spark SQL-partities optimaliseren

  • spark.sql.shuffle.paritions is standaard 200. We kunnen ons aanpassen op basis van de bedrijfsbehoeften bij het schuiven van gegevens voor joins of aggregaties.
  • spark.sql.files.maxPartitionBytes is standaard 1G in HDI. Het maximum aantal bytes dat in één partitie moet worden verpakt bij het lezen van bestanden. Deze configuratie is alleen effectief wanneer u bestandsbronnen gebruikt, zoals Parquet, JSON en ORC.
  • AQE in Spark 3.0. Zie Uitvoering van adaptieve query's

Volgende stappen