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