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
- 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
Controleren of de Yarn-gebruikersinterface toegankelijk is via
https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster
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
Ga naar overzicht van Ambari UI > YARN>, controleer clustergeheugen in ServiceMetrics
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.
- 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
enspark.driver.cores
- In de clientmodus gebruikt u
spark.yarn.am.memory+spark.yarn.am.memoryOverhead
enspark.yarn.am.cores
- In de clustermodus gebruikt u
Notitie
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- Vergelijk het totale aantal resources van uw nieuwe toepassing met beschikbare yarn-resources in de opgegeven wachtrij
Stap 3: Uw Spark-toepassing bijhouden
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.
- Gegevensopslag optimaliseren voor Apache Spark
- Gegevensverwerking optimaliseren voor Apache Spark
- Geheugengebruik optimaliseren voor Apache Spark
- HDInsight-clusterconfiguratie optimaliseren voor Apache Spark
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