Delen via


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 de onderstaande algemene scenario's tegenkomen

  • Dezelfde Spark-taak is langzamer dan voorheen in hetzelfde HDInsight-cluster
  • De spark-taak is langzamer in hdInsight-cluster dan on-premises of een andere serviceprovider van derden
  • De spark-taak is langzamer in één HDI-cluster dan 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 onjuist formaat van uitvoerders en OutOfMemoryError
  • Te veel taken of te weinig taken
  • Gegevens scheeftrekken veroorzaakten een paar zware taken of trage taken
  • Taken langzamer in slechte 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 ResourceManager en NodeManager in YARN > SUMMARY: Alle NodeManager moet zijn gestart en alleen Active ResourceManager moet zijn gestart
  1. Controleren of de gebruikersinterface van Yarn toegankelijk is via https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster

  2. Controleren of er uitzonderingen of fouten zijn in het resourcemanager-aanmeldingslogboek /var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log

Zie meer informatie in Yarn Common Issues

Stap 2: Vergelijk uw nieuwe toepassingsbronnen met beschikbare yarn-resources

  1. Ga naar HET YARN-OVERZICHT >van Ambari UI>, controleer HET CLUSTERGEHEUGEN in ServiceMetrics

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

  • 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 de gebruiker van domeinbeheerder gebruiken.
  1. Het totale aantal resources voor uw nieuwe toepassing berekenen
  • Alle uitvoerdersbronnen: spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores. Zie meer informatie in spark-uitvoerdersconfiguratie
  • ApplicationMaster
    • In de clustermodus gebruikt spark.driver.memory en spark.driver.cores
    • In de clientmodus gebruikt 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 de totale resources van uw nieuwe toepassing met de 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 gebruikersinterface van Spark- of Spark-geschiedenis:

  • Welke fase is traag
  • Zijn het totale aantal CPU v-cores dat volledig wordt 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 meer informatie in Het bewaken van uw Spark-toepassingen

Stap 4: Uw Spark-toepassing optimaliseren

Er zijn veel optimalisaties die u kunnen helpen deze uitdagingen te overwinnen, zoals opslaan in cache 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.partitions is standaard 200. We kunnen aanpassen op basis van de behoeften van het bedrijf bij het opsnipperen 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 van kracht wanneer u bestandsbronnen zoals Parquet, JSON en ORC gebruikt.
  • AQE in Spark 3.0. Bekijk de uitvoering van adaptieve query's

Volgende stappen