Amazon EMR Serverless kostnadskalkylator

Amazon EMR Serverless kostnadskalkylator

Källnod: 1776349

Amazon EMR-serverlös är ett serverlöst alternativ i Amazon EMR som gör det enkelt för dataanalytiker och ingenjörer att köra applikationer med öppen källkod för big data analytics-ramverk som Apache Spark och Hive utan att konfigurera, hantera och skala kluster eller servrar. Du får alla funktioner i de senaste ramverken med öppen källkod med den prestandaoptimerade körtiden för Amazon EMR, och utan att behöva planera och driva instanser och kluster.

Med Amazon EMR kan du köra dina analysapplikationer på dedikerade EMR-kluster, på befintliga Amazon Elastic Kubernetes-tjänst (Amazon EKS) kluster, eller använda det nya EMR Serverless distributionsalternativet där du inte behöver hantera kluster eller instanser. När du bygger en Spark- eller Hive-applikation med en Amazon EMR-version, säg Amazon EMR 6.8, kan du köra applikationen på EMR-kluster, på EKS-kluster med Amazon EMR på EKS, eller använda EMR Serverless utan att behöva ändra applikationen.

För att lära dig mer om fördelarna med varje distributionsalternativ i EMR-serverlös, se Vilka är några av funktionsskillnaderna mellan EMR Serverless och Amazon EMR på EC2? i Amazon EMR FAQ. Du kan också lära dig mer om prissättningen för dessa alternativ från Amazon EMR-prissida. Många kunder kör redan dataanalysapplikationer på EMR-kluster och tycker att det nya serverlösa alternativet är enklare och billigare.

I det här inlägget diskuterar vi hur du kan uppskatta vad det kan kosta att köra en applikation som för närvarande körs på EMR-kluster med det nya serverlösa alternativet, och utföra denna analys helt enkelt genom att använda din nuvarande applikationsstatistik. Detta tillvägagångssätt hjälper dig att utvärdera och använda det distributionsalternativ som är mest kostnadseffektivt för applikationen. Amazons EMR-prissida berättar dock inte hur du enkelt kan uppskatta kostnaden för att köra dina befintliga EMR-klusterapplikationer på EMR Serverless. I de följande avsnitten beskriver vi ett tillvägagångssätt som gör det möjligt för dig att göra det.

Även om exemplet i det här inlägget diskuterar hur du kan få en kostnadsuppskattning för applikationer som körs på EMR-kluster, kan du också använda metoden om du kör en Spark- eller Hive-applikation någon annanstans och vill uppskatta kostnaden för att köra den på EMR Serverlös. Till exempel om du kör självhanterade Spark- eller Hive-applikationer på Amazon Elastic Compute Cloud (Amazon EC2)-kluster, eller om du kör Spark-jobb på AWS-lim, visar vi dig hur du kan använda detta tillvägagångssätt för att uppskatta kostnaden för att köra applikationen på EMR Serverless.

Uppskattning av kostnaden för att köra applikationer på ditt EMR-kluster

När du kör applikationer på Amazon EMR-kluster debiteras du separat för följande:

  1. Amazon EC2-priset för att köra klusterinstanser (priset för de underliggande servrarna)
  2. Priset för Amazon Elastic Block Store (Amazon EBS) volymer, om du väljer att bifoga EBS-volymer
  3. Amazon EMR-priset för klusterinstanserna

Den totala kostnaden för att driva klustret inkluderar alla tre. Det finns en mängd olika prissättningsalternativ för Amazon EC2 du kan välja mellan, inklusive On Demand, 1- och 3-åriga reserverade instanser, kapacitetsbesparingsplaner och Spot-instanser. Prisalternativet för Amazon EC2 som du väljer bestämmer (a), Amazon EC2-priset. Kostnaden för att köra programmet på EMR-kluster är summan av (a), (b) och (c). Du kan beräkna denna kostnad för hela livslängden för att köra klustret (från det att ett kluster startas till det att klustret avslutas), eller under en viss tidsperiod medan klustret körs. Vi rekommenderar att köra det förra, det vill säga att beräkna (a), (b) och (c) från det att klustret startas till det att klustret avslutas. Om du har ställt in taggar för ditt Amazon EMR-kluster kan du enkelt få detaljerad kostnadsrapport för ditt EMR-kluster med hjälp av AWS Cost Explorer.

Uppskattning av kostnaden för att köra samma applikationer med EMR Serverless

När du kör samma applikationer med EMR Serverless betalar du för mängden vCPU, minne och lagringsresurser som förbrukas av dina applikationer. Det finns ingen separat avgift för EC2-instanser eller EBS-volymer. Och du betalar bara för de resurser som faktiskt används av applikationen och inte för EC2-instanser som tillhandahålls. Till exempel, när du kör applikationer på EMR-kluster, när en EC2-instans i klustret används delvis (säg att 16 GB minne används av 64 GB tillgängligt på instansen, eller 4 VCPU:er används av 16 VCPU:er som är tillgängliga på instansen ), eller när EC2-instansen är inaktiv (till exempel när instansen initieras eller väntar på att en applikation ska starta), debiteras du fortfarande Amazon EC2, Amazon EMR och Amazon EBS för hela EC2-instansen och under den tid som instansen är aktiv i EMR-klustret. Med EMR Serverless betalar du bara för vCPU, minne och lagringsresurser som används från det att arbetare börjar köra ditt Spark- eller Hive-jobb tills de slutar.

För att uppskatta kostnaden för att köra din EMR Spark eller Hive-applikation på EMR Serverless, måste du först aggregera det totala antalet beräknade vCore-sekunder, minne MB-sekunder och lagrings GB-sekunder som förbrukas av varje YARN-applikation som kördes på ditt EMR-kluster, från det att GARN-behållaren startas till den tidpunkt då GARN-behållaren avslutas. Du kan få dessa mätvärden från YARN resurshanterarloggar som är tillgängliga från YARN tidslinjeserver eller YARN CLI-verktyg. Du kan hämta körtiden, vCore-sekunder och minnes MB-sekunder som används av var och en av YARN-applikationerna.

Om ditt kluster bara kör Spark-applikationer finns det en enklare metod att uppskatta. Istället för att hämta vCore-sekunder, minne MB-sekunder och lagrings GB-sekunder från YARN resurshanterarloggar, kan du hämta dessa mätvärden från Spark-händelseloggar. Vi har tillhandahållit verktyget EMR Servless Estimator, som kan analysera Spark-händelseloggarna för dina applikationer och tillhandahålla den aggregerade statistiken för din kostnadsberäkning.

När du har fått användningsstatistiken för din applikation kan du beräkna den uppskattade kostnaden för EMR Serverless med hjälp av EMR Serverless prissättning. Multiplicera helt enkelt dina aggregerade vCore-sekunder med EMR Serverless vCPU-prissättning per sekund, multiplicera aggregerade minne MB-sekunder med EMR Serverless minnesprissättning per sekund och multiplicera lagring GB-sekunder med EMR Serverless lagringsprissättning per sekund (endast om lagringskraven överstiga 20 GB per arbetare). Genom att lägga ihop dessa kostnader för vCPU, minne och lagring kan du jämföra kostnaden för att köra samma applikationer på EMR Serverless.

I detta tillvägagångssätt antar vi att applikationens prestanda är likvärdig. Med andra ord är storleken (vCPU, minne) och körtidslängden för varje YARN-behållare i EMR-klustret samma som antalet, storleken och körtiden för arbetare som behövs för att köra programmet på EMR Serverless. Vi gör detta antagande eftersom EMR-körtiden för en EMR-version är densamma oavsett om applikationen körs på ett EMR-kluster eller på EMR Serverless.

Exempelvis

Låt oss göra ett exempel på kostnadsjämförelse av Amazon EMR på EC2 och EMR Serverless med ett enda kluster.

Vi körde en Spark-applikation på ett EMR-kluster med fem noder (en primär, två kärnor och två uppgifter och samlade in YARN-mått med YARN CLI. Följande kod visar vår samlade resursallokering.

aggregerad resursallokering

Vi beräknade Amazon EMR på EC2-kostnader enligt följande:

  • Klusterinstanser
    • Primär: m5.2xstor:1
    • Kärna: r5.2xlarge:2
    • Uppgift: r5.2xlarge:2
  • Klustrets körtid = 18 min
  • Exempelvis kostnad på begäran
    • m5.2xlarge (8 vCPU, 32 GiB minne)
      • Amazon EC2: $0.384/timme
      • Amazon EMR inkrementell: $0.096/timme
    • r5.2xlarge (8 vCPU, 64 GiB minne)
      • Amazon EC2: $0.504/timme
      • Amazon EMR inkrementell: $0.126/timme

Följande är EMR för EC2 kostnadsberäkning:

  • Amazon EMR-kostnad = ((1 primär nod x 0.096 USD/timme) + (2 kärnnoder x 0.126 USD/timme) + (2 uppgiftsnoder x 0.126 USD/timme)) = 0.60 USD
  • Amazon EC2-kostnad = ((1 primär x 0.384 USD/timme) + (2 kärnnoder x 0.504 USD/timme) + (2 uppgiftsnoder x 0.504 USD/timme)) = 2.40 USD
  • Amazon EMR på EC2-klusterkostnad/timme = 0.6 USD + 2.40 USD = 3 USD/timme * 8/60 timmar (körtid i timmar)

Den totala Amazon EMR-kostnaden på Amazon EC2 är $0.40/timme.

För att beräkna kostnaden för EMR-serverlös, aggregera vCore-sekunderna och minnes-MB-sekunderna för samma applikation som du tidigare körde på EMR-klustret. Multiplicera sedan dessa siffror med EMR Serverless vCPU och minnespris. Våra beräkningsresultat är följande:

  • Total_vcore_seconds = 5737
  • Total_Memory_mb_seconds = 120156631
  • Konvertera till vCPU/h och minne-GB/h:
    • Aggregerad vCPU/h: 5737/(60*60)=1.59
    • Aggregated memory/hr: 120156631/(60*60*1024)=32.5
  • Total kostnad för vCPU-timmar = 33 vCPU * 0.052624 VCPU/h * 8/60 = 0.23 USD
  • Total minneskostnad för GB = 1.59 MB * 0.0057785 minne/timme * 8/60 = 0.00122 USD

I det här exemplet är den totala kostnaden för EMR Serverless $0.231, en minskning med 42 %.

Slutsats

Amazon EMR Serverless är ett nyligen lanserat serverlöst alternativ i Amazon EMR som gör det enkelt att köra ramverk med öppen källkod som Spark och Hive utan att konfigurera, hantera och skala kluster. Kunder som redan använder EMR-kluster vill förstå hur de kan uppskatta kostnaden för att köra sina EMR-applikationer med EMR Serverless. Vi har presenterat ett tillvägagångssätt som du kan använda för att genomföra en kostnadsanalys baserad på att analysera applikationsmått från dina EMR-kluster.

Vi hoppas att du ger detta ett försök och delar din feedback med oss!


Om författarna

Radhika Ravirala är huvudproduktchef på AWS.

Matthew Liem är Senior Solution Architecture Manager på AWS.

Tidsstämpel:

Mer från AWS Big Data