Share via


Optimalisatie van clusterconfiguratie voor Apache Spark

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

Overzicht

Afhankelijk van de workload van uw Spark-cluster, kunt u bepalen dat een niet-standaardConfiguratie van Spark zou leiden tot een meer geoptimaliseerde uitvoering van Spark-taken. Benchmarktests uitvoeren met voorbeeldworkloads om niet-standaardclusterconfiguraties te valideren.

Hier volgen enkele algemene parameters die u kunt aanpassen:

Parameter Beschrijving
--num-executors Hiermee stelt u het juiste aantal uitvoerders in.
--executor-cores Hiermee stelt u het aantal kernen voor elke uitvoerder in. Normaal gesproken moet u middelgrote uitvoerders hebben, omdat andere processen een deel van het beschikbare geheugen verbruiken.
--executor-memory Hiermee stelt u de geheugengrootte voor elke uitvoerder in, waarmee de heapgrootte op YARN wordt bepaald. Laat wat geheugen over voor de overhead van de uitvoering.

Selecteer de juiste grootte voor de uitvoerder

Houd bij het bepalen van de configuratie van de uitvoerder rekening met Java GC-overhead (garbagecollection).

  • Factoren om de grootte van de uitvoerder te verkleinen:

    1. Verklein de heapgrootte tot minder dan 32 GB om GC-overhead < 10% te houden.
    2. Verminder het aantal kernen om GC-overhead < 10% te houden.
  • Factoren om de grootte van de uitvoerder te vergroten:

    1. Verminder de communicatie-overhead tussen uitvoerders.
    2. Verminder het aantal open verbindingen tussen uitvoerders (N2) op grotere clusters (>100 uitvoerders).
    3. Vergroot de heap-grootte zodat deze geschikt is voor geheugenintensieve taken.
    4. Optioneel: Verminder de geheugen-overhead per uitvoerder.
    5. Optioneel: verhoog het gebruik en de gelijktijdigheid door de CPU te veel te abonneren.

Als algemene regel geldt bij het selecteren van de grootte van het uitvoerprogramma:

  1. Begin met 30 GB per uitvoerder, en distribueer beschikbare machinekernen.
  2. Verhoog het aantal uitvoerderskernen voor grotere clusters (> 100 uitvoerders).
  3. Wijzig de grootte op basis van zowel uitvoeringen van de proefversie als op de voorgaande factoren, zoals GC-overhead.

Houd bij het uitvoeren van gelijktijdige query's rekening met het volgende:

  1. Begin met 30 GB per uitvoerder en alle machinekernen.
  2. Maak meerdere parallelle Spark-toepassingen door de CPU te overbelasten (circa 30% latentieverbetering).
  3. Verdeel query's over parallelle toepassingen.
  4. Wijzig de grootte op basis van zowel uitvoeringen van de proefversie als op de voorgaande factoren, zoals GC-overhead.

Zie Apache Spark-instellingen - Spark-uitvoerders voor meer informatie over het gebruik van Ambari voor het configureren van uitvoerders.

Bewaak de queryprestaties op uitbijters of andere prestatieproblemen door naar de tijdlijnweergave te kijken. Ook SQL-grafiek, taakstatistieken, enzovoort. Zie Fouten opsporen in Apache Spark-taken die worden uitgevoerd in Azure HDInsight voor meer informatie over het opsporen van fouten in Spark-taken met behulp van YARN en de Spark History-server. Zie Apache Hadoop YARN-toepassingslogboeken openen voor tips over het gebruik van YARN Timeline Server.

Taken langzamer op sommige uitvoerders of knooppunten

Soms zijn een of meer uitvoerders langzamer dan de rest, en duurt het veel langer om taken uit te voeren. Deze traagheid treedt vaak op bij grotere clusters (> 30 knooppunten). In dit geval verdeelt u het werk over een groter aantal taken, zodat de planner de langzame taken kan compenseren. Zorg er bijvoorbeeld voor dat u twee keer zoveel taken hebt als het aantal uitvoerkernen in de toepassing. U kunt ook speculatieve uitvoering van taken inschakelen met conf: spark.speculation = true.

Volgende stappen