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