Kennismaken met Spark
Spark is een engine voor gegevensverwerking, wat betekent dat data engineers grote gegevenssets efficiënt kunnen extraheren, transformeren en analyseren in gedistribueerde systemen. Wat het uit elkaar zet, is de mogelijkheid om verschillende typen gegevensworkloads onder één framework te combineren. Met Spark hebt u geen afzonderlijke systemen nodig voor realtime streaming, batchverwerking, SQL-query's of machine learning. Alles kan worden gedaan in Spark met een consistente set API's.
Een andere kracht ligt in zijn gebruiksgemak. Spark ondersteunt meerdere programmeertalen, waaronder Python, Java, Scala en R. Als u al vertrouwd bent met Python, kunt u PySpark, de Python-interface voor Spark, gebruiken om direct gegevens te analyseren.
Misschien wel het belangrijkste, Spark is gebouwd met schaalbaarheid in gedachten. U kunt beginnen met experimenteren op uw lokale computer en vervolgens, zonder uw code te wijzigen, dezelfde toepassing uitvoeren op een cluster van honderden of duizenden computers.
Het ecosysteem van Spark
Hoewel mensen vaak over Spark praten als één ding, is het eigenlijk een ecosysteem van bibliotheken die zijn gebouwd op de kernengine:
Spark Core biedt de basis voor gedistribueerde computing, waaronder taakplanning, geheugenbeheer en foutherstel.
Met Spark SQL kunt u met gestructureerde gegevens werken met behulp van een taal die de meeste analisten al kennen: SQL. Het kan ook worden geïntegreerd met externe gegevensbronnen, zoals Hive, Parquet en JSON.
Met Spark Streaming kunt u gegevens bijna in realtime verwerken, wat handig is voor toepassingen zoals fraudedetectie of bewaking van systeemlogboeken.
MLlib is de machine learning-bibliotheek van Spark. Het biedt schaalbare implementaties van algoritmen voor classificatie, clustering, regressie en aanbeveling.
GraphX wordt gebruikt voor grafiekberekeningen, zoals het analyseren van sociale netwerken of modelleringsrelaties tussen entiteiten.
              
              
            
Samen maken deze onderdelen van Spark een one-stop oplossing voor de meeste big data-problemen.
Hoe Spark werkt
Misschien vraagt u zich af: waarom zou ik in de eerste plaats een Spark-programma schrijven? Het antwoord is schaal. Wanneer uw dataset te groot is om in het geheugen van een enkele computer te passen, of wanneer u berekeningen veel sneller wilt uitvoeren dan traditionele hulpmiddelen zoals Pandas of Excel, treedt Spark in werking. Met Spark kunt u code schrijven die vergelijkbaar is met het werken met lokale gegevens, maar het distribueert dat automatisch op veel computers in een cluster. Het resultaat is dat u gigabytes, terabytes of zelfs petabytes aan gegevens kunt analyseren zonder de logica telkens opnieuw te schrijven wanneer de gegevensset groeit.
Stel dat uw bedrijf clickstreamgegevens van de website opslaat in Azure Data Lake Storage. U wilt het gedrag van klanten begrijpen door alle klikken van de afgelopen 24 uur te filteren, dat samen te voegen met een gebruikersprofieltabel en vervolgens de vijf meest bezochte productcategorieën te berekenen.
Dit gebeurt wanneer u dit implementeert in Databricks:
Uw notebook bevat de code die u hebt geschreven in Python (PySpark) en dit wordt uitgevoerd in het stuurprogrammaprogramma. Het stuurprogramma is verantwoordelijk voor het omzetten van uw opdrachten op hoog niveau (zoals het filteren van rijen of het groeperen van gegevens) in een plan van kleinere taken.
De clusterbeheerder wijst deze taken vervolgens toe aan verschillende uitvoerders. Elke uitvoerder is een werkproces dat wordt uitgevoerd op een computer in uw cluster. Apache Spark-clusters zijn groepen onderling verbonden servers die worden behandeld als één rekenengine en verwerken de uitvoering van opdrachten die zijn uitgegeven vanuit notebooks. Eén uitvoerder kan de klikken van gisteren filteren op gebruikers-id's 1-100.000, een andere uitvoerder (op dezelfde of een andere server) voor id's 100.001-200.000, enzovoort.
Zodra alle uitvoerders hun deel van het werk hebben voltooid, verzamelt Spark de resultaten, combineert ze en geeft u een schoon DataFrame weer met de belangrijkste productcategorieën.
              
              
            
Vanuit uw perspectief als data engineer schrijft u alleen vertrouwde DataFrame-code in uw Databricks-notebook. Spark zorgt voor het distribueren van de gegevens, het parallelliseren van de berekening en het opnieuw uitvoeren van taken als er iets in het cluster mislukt. Met dit ontwerp maakt Spark benaderbaar, bijna zoals wanneer u met lokale datatools werkt, maar achter de schermen wordt een zeer parallelle, fouttolerante berekening georkestreerd op mogelijk honderden computers.
Luie evaluatie en dag
Een van de belangrijkste ontwerpkeuzes van Spark is luie evaluatie. In tegenstelling tot hulpprogramma's zoals Pandas, waarbij elke bewerking onmiddellijk wordt uitgevoerd, worden uw opdrachten niet uitgevoerd zodra u ze schrijft. Wanneer u transformaties toepast, zoals het filteren van rijen, het samenvoegen van tabellen of het selecteren van kolommen, registreert Spark deze bewerkingen in een plan. Er wordt nog niets berekend. Met deze benadering kan Spark de volledige reeks bewerkingen bekijken voordat u de meest efficiënte manier kiest om ze uit te voeren.
Achter de schermen bouwt Spark een Directed Acyclic Graph (DAG) van bewerkingen. Elk knooppunt in de grafiek vertegenwoordigt een gegevensset en elke rand vertegenwoordigt een transformatie die op die gegevensset wordt toegepast. Omdat de grafiek acyclisch is, stroomt deze in één richting, van uw onbewerkte invoergegevens tot het uiteindelijke resultaat, zonder dat de grafiek weer op zichzelf wordt herhaald. De optimalisatieroutine van Spark analyseert deze DAG om stappen te combineren, gegevensverplaatsing te minimaliseren en de beste uitvoeringsstrategie in het cluster te bepalen.
              
              
            
De uitvoering begint alleen wanneer u een actie uitvoert, zoals het verzamelen van resultaten voor het stuurprogramma, het schrijven van gegevens naar opslag of het tellen van rijen. Op dat moment verzendt Spark de geoptimaliseerde DAG als een reeks taken naar de clusterbeheerder, die ze over uitvoerders distribueert. Dit ontwerp helpt Spark hoge prestaties te bereiken: het voorkomt onnodige berekeningen, vermindert het opschonen van gegevens tussen knooppunten en zorgt ervoor dat de clusterbronnen zo efficiënt mogelijk worden gebruikt.
Praktijkgevallen
Organisaties in veel branches gebruiken Spark wanneer ze grote of snel bewegende gegevenssets moeten verwerken en analyseren. Een videostreamingservice kan bijvoorbeeld Spark gebruiken om een aanbevelingsengine te bouwen waarmee nieuwe inhoud wordt voorgesteld op basis van de weergavegeschiedenis. Een financiële instelling kan afhankelijk zijn van Spark Streaming om transacties in realtime te bewaken en verdachte activiteiten te markeren. In de gezondheidszorg kunnen onderzoekers Spark gebruiken om genetische gegevens op schaal te analyseren om patronen met betrekking tot ziekten te identificeren. Zelfs in meer traditionele bedrijfsinstellingen speelt Spark vaak een rol bij het voorbereiden en transformeren van onbewerkte operationele gegevens, zodat deze kunnen worden gebruikt voor dashboards en rapportage.
Andere veelgebruikte toepassingen zijn het analyseren van grote hoeveelheden webserverlogboeken, het in realtime uitvoeren van dashboards voor IoT-apparaten (Internet of Things), het trainen van machine learning-modellen op zeer grote gegevenssets en het bouwen van ETL-pijplijnen die onbewerkte gegevens uit meerdere bronnen extraheren, opschonen en combineren.
Compatibiliteits- en implementatieopties
Een van de sterke punten van Spark is dat u hiermee niet in één infrastructuur wordt vergrendeld. In plaats daarvan is het ontworpen om te worden uitgevoerd op verschillende gedistribueerde systemen, wat u flexibiliteit biedt in hoe en waar u deze implementeert. Op het eenvoudigste niveau kan Spark lokaal worden uitgevoerd op uw eigen computer, zodat u eenvoudig kunt experimenteren met kleine gegevenssets of de basisbeginselen kunt leren zonder een cluster in te stellen. Wanneer u meer vermogen nodig hebt, kunt u uitschalen door Spark uit te voeren op een zelfstandig cluster met machines of deze te integreren met resourcemanagers zoals Hadoop YARN of Apache Mesos, die de planning en resourcetoewijzing verwerken.
In de cloud wordt Spark op grote schaal ondersteund door verschillende providers. Services zoals Azure Databricks, Azure Synapse Analytics en Microsoft Fabric maken het bijvoorbeeld eenvoudig om Spark-clusters te starten zonder dat u zich zorgen hoeft te maken over de details van het instellen en beheren van clusters. Spark wordt ook steeds vaker geïmplementeerd in Kubernetes, waardoor organisaties hun Spark-toepassingen kunnen containeriseren en uitvoeren in moderne, cloudeigen omgevingen. Deze flexibiliteit betekent dat naarmate uw behoeften zich ontwikkelen, van lokale ontwikkeling tot on-premises clusters, tot grootschalige cloudimplementaties, u dezelfde Spark-toepassingen kunt blijven gebruiken zonder ze opnieuw te schrijven voor een ander platform.