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