Lär känna Spark

Slutförd

Spark är en databehandlingsmotor, vilket innebär att datatekniker effektivt kan extrahera, transformera och analysera massiva datamängder i distribuerade system. Det som skiljer den åt är dess förmåga att förena olika typer av dataarbetsbelastningar inom ett ramverk. Med Spark behöver du inte separata system för direktuppspelning i realtid, batchbearbetning, SQL-frågor eller maskininlärning. Allt kan göras i Spark med en konsekvent uppsättning API:er.

En annan styrka ligger i dess användarvänlighet. Spark stöder flera programmeringsspråk, inklusive Python, Java, Scala och R. Om du redan är bekväm med Python kan du använda PySpark, Python-gränssnittet för Spark, för att börja analysera data direkt.

Kanske viktigast av allt, Spark byggdes med skalbarhet i åtanke. Du kan börja experimentera på den lokala datorn och sedan, utan att ändra koden, köra samma program på ett kluster med hundratals eller tusentals datorer.

Sparks ekosystem

Medan människor ofta pratar om Spark som en enda sak, är det faktiskt ett ekosystem av bibliotek som bygger på kärnmotorn:

  • Spark Core utgör grunden för distribuerad databehandling, inklusive schemaläggning av uppgifter, minneshantering och felåterställning.

  • Med Spark SQL kan du arbeta med strukturerade data med hjälp av ett språk som de flesta analytiker redan känner till: SQL. Den integreras också med externa datakällor som Hive, Parquet och JSON.

  • Med Spark Streaming kan du bearbeta data nästan i realtid, vilket är användbart för program som identifiering av bedrägerier eller övervakning av systemloggar.

  • MLlib är Sparks maskininlärningsbibliotek. Den tillhandahåller skalbara implementeringar av algoritmer för klassificering, klustring, regression och rekommendation.

  • GraphX används för grafberäkning, till exempel analys av sociala nätverk eller modellering av relationer mellan entiteter.

Diagram över Spark-bibliotek.

Tillsammans gör dessa komponenter Spark till en engångslösning för de flesta stordataproblem.

Så här fungerar Spark

Du kanske undrar: varför skulle jag skriva ett Spark-program från början? Svaret är skala. När din datauppsättning är för stor för att få plats i minnet på en enda dator, eller när du behöver beräkningar för att slutföra mycket snabbare än vad traditionella verktyg som Pandas eller Excel kan hantera, stegar Spark in. Med Spark kan du skriva kod som liknar att arbeta med lokala data, men som distribueras automatiskt över många datorer i ett kluster. Resultatet är att du kan analysera gigabyte, terabyte eller till och med petabyte med data utan att skriva om logiken varje gång datamängden växer.

Anta att ditt företag lagrar webbplatsklickströmsdata i Azure Data Lake Storage. Du vill förstå kundens beteende genom att filtrera alla klick från de senaste 24 timmarna, koppla det till en användarprofiltabell och sedan beräkna de fem mest besökta produktkategorierna.

Det här händer när du implementerar detta i Databricks:

  • Din notebook-fil innehåller koden du skrev i Python (PySpark) och den körs på drivrutinsprogrammet. Drivrutinen ansvarar för att omvandla dina kommandon på hög nivå (som att filtrera rader eller gruppera data) till en plan för mindre uppgifter.

  • Klusterhanteraren tilldelar sedan dessa uppgifter till olika utförare. Varje exekutör är en arbetsprocess som körs på en dator i ditt kluster. Apache Spark-kluster är grupper av sammankopplade servrar som behandlas som en enda beräkningsmotor och hanterar körningen av kommandon som utfärdas från notebook-filer. En exekutor kan filtrera gårdagens klick för användar-ID:n 1–100 000, en annan exekutor (på samma eller en annan server) för användar-ID:n 100 001–200 000 och så vidare.

  • När alla utförare har slutfört sin del av arbetet samlar Spark in resultaten, kombinerar dem och ger dig en ren DataFrame som visar de främsta produktkategorierna.

Diagram som visar Spark-arkitekturen.

Från ditt perspektiv som datatekniker skriver du bara välbekant DataFrame-kod i din Databricks-notebook-fil. Spark tar hand om att distribuera data, parallellisera beräkningen och försöka utföra uppgifter igen om något misslyckas i klustret. Den här designen gör att Spark känns lättillgängligt – nästan som om du arbetar med lokala dataverktyg – men under huven samordnar den en mycket parallell, feltolerant beräkning över potentiellt hundratals datorer.

Lazy Evaluation och DAG

Ett av Sparks viktigaste designval är fördröjd utvärdering. Till skillnad från verktyg som Pandas, där varje åtgärd körs omedelbart, kör Spark inte dina kommandon så fort du skriver dem. När du använder transformeringar som att filtrera rader, koppla tabeller eller välja kolumner, registrerar Spark i stället bara dessa åtgärder i en plan. Ingenting har faktiskt beräknats ännu. Med den här metoden kan Spark titta på hela sekvensen med åtgärder innan du bestämmer dig för det mest effektiva sättet att köra dem.

I bakgrunden skapar Spark en riktad acyklisk graf (DAG) med åtgärder. Varje nod i diagrammet representerar en datauppsättning och varje kant representerar en transformering som tillämpas på datauppsättningen. Eftersom grafen är acyklisk flödar den i en riktning – från dina rådata till slutresultatet – utan att loopa tillbaka på sig själv. Sparks optimerare analyserar denna DAG för att kombinera steg, minimera dataflytt och fastställa den bästa körningsstrategin i klustret.

Diagram som visar ett Spark Directed Acyclic Graph (DAG).

Körningen börjar bara när du utför en åtgärd, till exempel att samla in resultat till drivrutinen, skriva data till lagring eller räkna rader. Vid den tidpunkten skickar Spark den optimerade DAG som en serie uppgifter till klusterhanteraren, som distribuerar dem mellan körarna. Den här designen hjälper Spark att uppnå höga prestanda: den undviker onödiga beräkningar, minskar blandning av data mellan noder och säkerställer att klusterresurserna används så effektivt som möjligt.

Användningsfall i verkliga världen

Organisationer i många branscher använder Spark när de behöver bearbeta och analysera stora eller snabba datamängder. En videoströmningstjänst kan till exempel använda Spark för att skapa en rekommendationsmotor som föreslår nytt innehåll baserat på visningshistorik. Ett finansinstitut kan förlita sig på Spark Streaming för att övervaka transaktioner i realtid och flagga misstänkt aktivitet. Inom sjukvårdssektorn kan forskare använda Spark för att analysera genetiska data i stor skala för att identifiera mönster relaterade till sjukdomar. Även i mer traditionella affärsinställningar spelar Spark ofta en roll när det gäller att förbereda och transformera rådata så att de kan användas för instrumentpaneler och rapportering.

Andra vanliga program är att analysera stora volymer webbserverloggar, driva instrumentpaneler i realtid för IoT-enheter (Internet of Things), träna maskininlärningsmodeller på mycket stora datamängder och skapa ETL-pipelines som extraherar , rensar och kombinerar rådata från flera källor.

Kompatibilitets- och distributionsalternativ

En av Sparks styrkor är att den inte låser in dig i en enda infrastruktur. I stället är den utformad för att köras ovanpå en mängd olika distribuerade system, vilket ger dig flexibilitet i hur och var du distribuerar det. På den enklaste nivån kan Spark köras lokalt på din egen dator, vilket gör det enkelt att experimentera med små datamängder eller lära sig grunderna utan att konfigurera ett kluster. När du behöver mer ström kan du skala ut genom att köra Spark på ett fristående kluster med datorer eller integrera det med resurshanterare som Hadoop YARN eller Apache Mesos, som hanterar schemaläggning och resursallokering.

I molnet stöds Spark i stor utsträckning av olika leverantörer. Till exempel gör tjänster som Azure Databricks, Azure Synapse Analytics och Microsoft Fabric det enkelt att starta Spark-kluster utan att behöva bekymra dig om information om konfiguration och hantering av kluster. Spark distribueras också i allt högre grad på Kubernetes, vilket gör det möjligt för organisationer att containerisera sina Spark-program och köra dem i moderna, molnbaserade miljöer. Den här flexibiliteten innebär att när dina behov utvecklas – från lokal utveckling till lokala kluster till storskaliga molndistributioner – kan du fortsätta använda samma Spark-program utan att skriva om dem för en annan plattform.