Klusterkonfigurationsoptimering för Apache Spark

Den här artikeln beskriver hur du optimerar konfigurationen av ditt Apache Spark-kluster för bästa prestanda i Azure HDInsight.

Översikt

Beroende på spark-klusterarbetsbelastningen kan du fastställa att en Spark-konfiguration som inte är standard skulle resultera i en mer optimerad Spark-jobbkörning. Utför benchmark-testning med exempelarbetsbelastningar för att verifiera eventuella klusterkonfigurationer som inte är standard.

Här är några vanliga parametrar som du kan justera:

Parameter Beskrivning
--num-executors Anger lämpligt antal utförare.
--executor-cores Anger antalet kärnor för varje utförare. Normalt bör du ha medelstora utförare, eftersom andra processer förbrukar en del av det tillgängliga minnet.
--executor-memory Anger minnesstorleken för varje utförare, som styr heapstorleken på YARN. Lämna lite minne för körningskostnader.

Välj rätt körstorlek

När du bestämmer konfigurationen av din executor bör du tänka på kostnaden för Java-skräpinsamling (GC).

  • Faktorer för att minska körstorleken:

    1. Minska heapstorleken under 32 GB för att behålla GC-omkostnaderna < 10 %.
    2. Minska antalet kärnor för att behålla GC-omkostnaderna < 10 %.
  • Faktorer för att öka körstorleken:

    1. Minska kommunikationskostnaderna mellan utförare.
    2. Minska antalet öppna anslutningar mellan utförare (N2) i större kluster (>100 utförare).
    3. Öka heapstorleken för minnesintensiva uppgifter.
    4. Valfritt: Minska minneskostnaderna per exekutor.
    5. Valfritt: Öka användningen och samtidigheten genom att överprenumerera CPU.

Som en allmän regel när du väljer körstorleken:

  1. Börja med 30 GB per utförare och distribuera tillgängliga maskinkärnor.
  2. Öka antalet exekutorkärnor för större kluster (> 100 utförare).
  3. Ändra storlek baserat både på utvärderingskörningar och på föregående faktorer, till exempel GC-omkostnader.

Tänk på följande när du kör samtidiga frågor:

  1. Börja med 30 GB per köre och alla maskinkärnor.
  2. Skapa flera parallella Spark-program genom att överprenumerera CPU (cirka 30 % fördröjningsförbättring).
  3. Distribuera frågor mellan parallella program.
  4. Ändra storlek baserat både på utvärderingskörningar och på föregående faktorer, till exempel GC-omkostnader.

Mer information om hur du använder Ambari för att konfigurera utförare finns i Apache Spark-inställningar – Spark-köre.

Övervaka frågeprestanda för extremvärden eller andra prestandaproblem genom att titta på tidslinjevyn. Även SQL-graf, jobbstatistik och så vidare. Information om hur du felsöker Spark-jobb med YARN och Spark History-servern finns i Felsöka Apache Spark-jobb som körs i Azure HDInsight. Tips om hur du använder YARN Timeline Server finns i Access Apache Hadoop YARN-programloggar.

Uppgifter långsammare på vissa utförare eller noder

Ibland är en eller några av utförare långsammare än de andra, och aktiviteter tar mycket längre tid att köra. Den här långsamheten sker ofta i större kluster (> 30 noder). I det här fallet delar du upp arbetet i ett större antal aktiviteter så att schemaläggaren kan kompensera för långsamma uppgifter. Du kan till exempel ha minst dubbelt så många uppgifter som antalet executor-kärnor i programmet. Du kan också aktivera spekulativ körning av uppgifter med conf: spark.speculation = true.

Nästa steg