Delen via


Optimalisatie van geheugengebruik voor Apache Spark

In dit artikel wordt beschreven hoe u geheugenbeheer van uw Apache Spark-cluster optimaliseert voor de beste prestaties in Azure HDInsight.

Overzicht

Spark werkt door gegevens in het geheugen te plaatsen. Het beheren van geheugenresources is dus een belangrijk aspect van het optimaliseren van de uitvoering van Spark-taken. Er zijn verschillende technieken die u kunt toepassen om het geheugen van uw cluster efficiënt te gebruiken.

  • Gebruik eerder kleinere gegevenspartities en houd in uw partitiestrategie rekening met gegevensgrootten, -typen, en -distributie.
  • Overweeg de nieuwere, efficiëntere Kryo data serialization, in plaats van de standaard-Java-serialisatie.
  • Gebruik yarn liever, omdat deze wordt gescheiden spark-submit door batch.
  • Bewaak Spark-configuratie-instellingen en verfijn ze.

Ter referentie worden de Spark-geheugenstructuur en enkele belangrijke geheugenparameters voor de uitvoerder weergegeven in de volgende afbeelding.

Overwegingen voor Spark-geheugen

Als u Apache Hadoop YARN gebruikt, beheert YARN het geheugen dat door alle containers op elk Spark-knooppunt wordt gebruikt. In het volgende diagram ziet u de belangrijkste objecten en hun relaties.

YARN Spark Memory Management.

Probeer het volgende om berichten over onvoldoende geheugen af te handelen:

  • Bekijk beheer-shuffles in DAG. Verminder door brongegevens aan de toewijzingszijde te verminderen, brongegevens vooraf te partitioneren (of bucketize) te maximaliseren, enkelvoudige willekeurige volgordes te maximaliseren en de hoeveelheid verzonden gegevens te verminderen.
  • Gebruik eerder ReduceByKey - met de bijbehorende vaste geheugenlimiet - in plaats van GroupByKey, wat aggregaties, vensterbewerking en andere functies biedt, maar waarvoor een niet-gebonden geheugenlimiet geldt.
  • Gebruik eerder TreeReduce, wat meer werk uitvoert met de uitvoerders of partities, in plaats van Reduce, wat al het werk uitvoert in het stuurprogramma.
  • Gebruik DataFrames in plaats van de RDD-objecten op lager niveau.
  • Maak ComplexTypes dat acties inkapselt, zoals ‘Top N’, verschillende aggregaties of vensterbewerking.

Zie OutOfMemoryError-uitzonderingen voor Apache Spark in Azure HDInsight voor aanvullende stappen voor probleemoplossing.

Volgende stappen