Apache Spark i Azure Synapse Analytics Core Concepts

Apache Spark är ett ramverk för parallellbearbetning som stöder minnesintern bearbetning för att öka prestanda i program för stordataanalys. Apache Spark i Azure Synapse Analytics är en av Microsofts implementeringar av Apache Spark i molnet.

Azure Synapse gör det enkelt att skapa och konfigurera Spark-funktioner i Azure. Azure Synapse tillhandahåller en annan implementering av dessa Spark-funktioner som dokumenteras här.

Spark-pooler

En serverlös Apache Spark-pool skapas i Azure-portalen. Det är definitionen av en Spark-pool som, när den instansieras, används för att skapa en Spark-instans som bearbetar data. När en Spark-pool skapas finns den bara som metadata och inga resurser förbrukas, körs eller debiteras för. En Spark-pool har en serie egenskaper som styr egenskaperna för en Spark-instans. Dessa egenskaper omfattar men är inte begränsade till namn, storlek, skalningsbeteende, tid att leva.

Eftersom det inte finns någon dollar- eller resurskostnad associerad med att skapa Spark-pooler kan valfritt antal skapas med valfritt antal olika konfigurationer. Behörigheter kan också tillämpas på Spark-pooler som endast tillåter användare att ha åtkomst till vissa och inte andra.

Bästa praxis är att skapa mindre Spark-pooler som kan användas för utveckling och felsökning och sedan större för att köra produktionsarbetsbelastningar.

Du kan läsa hur du skapar en Spark-pool och ser alla deras egenskaper här Kom igång med Spark-pooler i Azure Synapse Analytics

Spark-instanser

Spark-instanser skapas när du ansluter till en Spark-pool, skapar en session och kör ett jobb. Eftersom flera användare kan ha åtkomst till en enda Spark-pool skapas en ny Spark-instans för varje användare som ansluter.

När du skickar ett andra jobb, om det finns kapacitet i poolen, har den befintliga Spark-instansen också kapacitet. Sedan bearbetar den befintliga instansen jobbet. Annars skapas en ny Spark-instans om kapaciteten är tillgänglig på poolnivå.

Faktureringen för instanserna startar när de virtuella Azure-datorerna startar. Faktureringen för Spark-poolinstanserna stoppas när poolinstanser ändras till att avslutas. Mer information om hur virtuella Azure-datorer startas och frigörs finns i Tillstånd och faktureringsstatus för virtuella Azure-datorer.

Exempel

Exempel 1

  • Du skapar en Spark-pool med namnet SP1; den har en fast klusterstorlek på 20 medelstora noder
  • Du skickar ett notebook-jobb, J1 som använder 10 noder, en Spark-instans, SI1 skapas för att bearbeta jobbet
  • Nu skickar du ett annat jobb, J2, som använder 10 noder eftersom det fortfarande finns kapacitet i poolen och instansen, J2, bearbetas av SI1
  • Om J2 hade bett om 11 noder skulle det inte ha funnits kapacitet i SP1 eller SI1. Om J2 i det här fallet kommer från en notebook-fil avvisas jobbet. Om J2 kommer från ett batchjobb placeras det i kö.
  • Faktureringen börjar när anteckningsboksjobbet J1 skickas.
    • Spark-poolen instansieras med 20 medelstora noder, var och en med 8 virtuella kärnor, och det tar vanligtvis cirka 3 minuter att starta. 20 x 8 = 160 virtuella kärnor.
    • Beroende på den exakta starttiden för Spark-poolen, tidsgränsen för inaktivitet och körningen av de två notebook-jobben. poolen kommer sannolikt att köras i mellan 18 och 20 minuter (Spark-poolinstansieringstid + körning av notebook-jobb + tidsgräns för inaktivitet).
    • Förutsatt 20 minuters körning, 160 x 0,3 timmar = 48 virtuella kärnor timmar.
    • Obs! Virtuella kärnor debiteras per minut och priserna för virtuella kärnor varierar beroende på Azure-region. Mer information finns i Prissättning för Azure Synapse

Exempel 2

  • Du skapar ett Spark-poolanrop SP2; den har en autoskalning aktiverad med minst 10 till högst 20 medelstora noder
  • Du skickar ett notebook-jobb J1 som använder 10 noder. en Spark-instans- SI1 skapas för att bearbeta jobbet
  • Nu skickar du ett annat jobb J2 som använder 10 noder. eftersom det fortfarande finns kapacitet i poolen skalar instansen automatiskt till 20 noder och bearbetar J2.
  • Faktureringen börjar när anteckningsboksjobbet J1 skickas.
    • Spark-poolen instansieras med 10 medelstora noder, var och en med 8 virtuella kärnor, och det tar vanligtvis cirka 3 minuter att starta. 10 x 8, 80 virtuella kärnor.
    • När J2 skickas skalas poolen automatiskt genom att ytterligare 10 medelstora noder läggs till och tar vanligtvis 4 minuter att autoskala. Lägger till 10 x 8, 80 virtuella kärnor för totalt 160 virtuella kärnor.
    • Beroende på starttiden för Spark-poolen, körningen av det första notebook-jobbet J1, tiden för att skala upp poolen, körningen av den andra notebook-filen och slutligen tidsgränsen för inaktivitet. poolen kommer sannolikt att köras mellan 22 och 24 minuter (Instansieringstid för Spark-pool + J1 notebook-jobbkörning på 80 virtuella kärnor) + (Autoskalningstid för Spark-pool + Körning av J2-notebook-jobb + tidsgräns för inaktivitet på 160 virtuella kärnor).
    • 80 virtuella kärnor i 4 minuter + 160 virtuella kärnor i 20 minuter = 58,67 virtuella kärnor.
    • Obs! Virtuella kärnor debiteras per minut och priserna för virtuella kärnor varierar beroende på Azure-region. Mer information finns i Prissättning för Azure Synapse

Exempel 3

  • Du skapar en Spark-pool med namnet SP1; den har en fast klusterstorlek på 20 noder.
  • Du skickar ett notebook-jobb J1 som använder 10 noder. en Spark-instans-SI1 skapas för att bearbeta jobbet.
  • En annan användare U2 skickar ett jobb-J3 som använder 10 noder. en ny Spark-instans SI2 skapas för att bearbeta jobbet.
  • Nu skickar du ett annat jobb J2 som använder 10 noder. eftersom det fortfarande finns kapacitet i poolen och instansen J2 bearbetas av SI1.
  • Faktureringen börjar när anteckningsboksjobbet J1 skickas.
    • Spark-poolen SI1 instansieras med 20 medelstora noder, var och en med 8 virtuella kärnor, och det tar vanligtvis cirka 3 minuter att starta. 20 x 8, 160 virtuella kärnor.
    • Beroende på den exakta starttiden för Spark-poolen, ide-timeouten och körningen av det första och tredje notebook-jobbet. SI1-poolen kommer sannolikt att köras i mellan 18 och 20 minuter (Spark-poolinstansieringstid + körning av notebook-jobb + tidsgräns för inaktivitet).
    • En annan Spark-pool-SI2 instansieras med 20 medelstora noder, var och en med 8 virtuella kärnor, och det tar vanligtvis cirka 3 minuter att starta. 20 x 8, 160 virtuella kärnor
    • Beroende på den exakta starttiden för Spark-poolen, ide-timeouten och körningen av det första notebook-jobbet. SI2-poolen kommer sannolikt att köras i mellan 18 och 20 minuter (Spark-poolinstansieringstid + körning av notebook-jobb + tidsgräns för inaktivitet).
    • Förutsatt att de två poolerna körs i 20 minuter vardera, 160 x .03 x 2 = 96 virtuella kärnor timmar.
    • Obs! Virtuella kärnor debiteras per minut och priserna för virtuella kärnor varierar beroende på Azure-region. Mer information finns i Prissättning för Azure Synapse

Kvoter och resursbegränsningar i Apache Spark för Azure Synapse

Arbetsytenivå

Varje Azure Synapse-arbetsyta har en standardkvot med virtuella kärnor som kan användas för Spark. Kvoten delas mellan användarkvoten och dataflödeskvoten så att inget av användningsmönstren använder alla virtuella kärnor på arbetsytan. Kvoten varierar mellan olika prenumerationstyper men är symmetrisk mellan användare och dataflöde. Men om du begär fler virtuella kärnor än vad som finns kvar på arbetsytan får du följande fel:

Failed to start session: [User] MAXIMUM_WORKSPACE_CAPACITY_EXCEEDED
Your Spark job requested 480 vCores.
However, the workspace only has xxx vCores available out of quota of yyy vCores.
Try reducing the numbers of vCores requested or increasing your vCore quota. Click here for more information - https://go.microsoft.com/fwlink/?linkid=213499

Länken i meddelandet pekar på den här artikeln.

I följande artikel beskrivs hur du begär en ökning av kvoten för virtuella kärnor på arbetsytan.

  • Välj "Azure Synapse Analytics" som tjänsttyp.
  • I fönstret Kvotinformation väljer du Apache Spark (virtuell kärna) per arbetsyta

Begära en kapacitetsökning via Azure-portalen

Spark-poolnivå

När du definierar en Spark-pool definierar du effektivt en kvot per användare för poolen, om du kör flera notebook-filer eller jobb eller en blandning av 2 är det möjligt att uttömma poolkvoten. Om du gör det genereras ett felmeddelande

Failed to start session: Your Spark job requested xx vCores.
However, the pool is consuming yy vCores out of available zz vCores.Try ending the running job(s) in the pool, reducing the numbers of vCores requested, increasing the pool maximum size or using another pool

För att lösa det här problemet måste du minska användningen av poolresurserna innan du skickar en ny resursbegäran genom att köra en notebook-fil eller ett jobb.

Nästa steg