Apache Spark is in essentie een framework voor parallelle dataverwerking, waarmee je eenvoudig razendsnelle big data-applicaties kunt ontwikkelen voor machine learning, stream processing en graph analytics. Als het gaat om het verwerken van big data, dan is snelheid essentieel. Een belangrijk verschil tussen Spark en Hadoop Mapreduce is dat Spark een geoptimaliseerde ‘directed acyclic graph’ (dac)-execution engine heeft, waardoor er efficiëntere query planning voor datatransformaties kan worden gemaakt.
Bovendien slaat Apache Spark input, output en tussentijdse data in-memory op als ‘resilient distributed datasets’ (rdd’s), wat snelle processing zonder i/o belasting mogelijk maakt, omdat de meeste reads en writes van en naar de harddisk worden vermeden. Dit verhoogt de prestaties van herhalende of interactieve toepassingen aanzienlijk. Zo zorgt Spark ervoor dat applicaties in Hadoop-clusters tot wel honderd keer sneller in het geheugen draaien en tot tien keer sneller vanaf harddisk.
Makkelijker ontwikkelen voor Spark
De meeste developers kennen de snelheidswinst van Spark ten opzichte van Mapreduce wel, maar de flexibiliteit in ondersteunde talen is wellicht minder bekend. Apache Spark ondersteunt Java, Scala en Python, wat enorm veel mogelijkheden geeft bij het bouwen van applicaties. Wat al deze talen gemeen hebben, is dat ze efficiënte manieren bieden om operations in ‘closures’ en lambdafuncties uit te drukken. Met closures kunnen gebruikers functies definiëren die afgestemd zijn op de kernlogica van de applicatie, wat een gestroomlijnde applicatie oplevert, met geordende, eenvoudig te lezen code.
Bovendien kunnen er SQL of HiveQL queries naar Apache Spark worden gestuurd, met de Spark SQL-module. Spark biedt meer dan tachtig high-level operators, waarmee eenvoudig parallelle apps kunnen worden gebouwd. Naast het draaien van applicaties, kan de Apache Spark api ook interactief met Python of Scala worden gebruikt, direct in de Apache Spark shell op een cluster. Handig!
Apache Spark gebruikt verschillende libraries, als SQL, Dataframes en Mlib, waarmee applicaties voor machine learning (mllib), stream processing (Spark Streaming) en graph processing (GraphX) kunnen worden gebouwd. Deze libraries zijn volledig geïntegreerd in het Apache Spark ecosysteem en kunnen naadloos worden gecombineerd in een en dezelfde applicatie. En waar Mapreduce voornamelijk data verwerkt die al opgeslagen is, kan Spark de data in realtime manipuleren, dankzij Spark Streaming.
Spark draait overal
Hoewel je Spark prima onafhankelijk kunt draaien in de standalone clustermodus, zijn de mogelijkheden veel uitgebreider dan dat. Zo draait het bijvoorbeeld ook op Hadoop’s Yarn cluster-manager. Hierdoor kunnen bestaande Hadoop-applicaties eenvoudig worden gemigreerd, wanneer het gebruik beter past bij Spark.
Daarnaast draait Spark op EC2 en Apache Mesos, en kan er data worden gelezen uit Cassandra, Hive, Tachyon HBase, HDFS en vrijwel alle Hadoop databronnen.
Groeiende Spark-community
Spark wordt gebouwd door een steeds grotere groep developers. Het project startte in 2009 en inmiddels hebben al meer dan 250 developers een bijdrage geleverd aan Spark. Dit zorgt ervoor dat functionaliteiten voortdurend worden uitgebreid en issues snel worden opgelost. Met versie 2.0 zijn er bovendien veel nieuwe functionaliteiten, waar ik erg enthousiast van word.
Zo is de SQL-functionaliteit verbeterd, hebben we native CSV data source, zijn er aanzienlijke snelheidsverbeteringen (2-10x), user-defined functionaliteiten met SparkR en structured streaming, een high level streaming-api die op Spark SQL is gebouwd.
Spark the future; waardevolle investering
De groei van Apache Spark staat niet op zich, maar valt samen met allerlei opkomende trends. Neem bijvoorbeeld het internet of things: de hoeveelheden data die hier de komende jaren verzameld gaan worden, zijn bijna onvoorstelbaar. Het IoT is bij uitstek gebaat bij de snelheid en de realtime dataverwerking van Spark; alles moet immers aan alles worden verbonden en vaak moet de data ook nog eens direct worden verwerkt om betekenisvolle resultaten op te leveren waarop direct gestuurd kan worden. Ook nieuwe toepassingen in bijvoorbeeld de gezondheidszorg, de financiële sector en het onderwijs, moeten steeds grotere datasets verwerken op een steeds grotere snelheid.
Het is dus niet verwonderlijk dat developers erg blij worden van Spark: het kan de ontwikkeling van applicaties enorm versnellen en vereenvoudigen, dankzij de geïntegreerde libraries zijn er geen externe pakketten meer nodig en applicaties zijn eenvoudiger te migreren en draaien tot wel honderd keer sneller. Spark vereist weliswaar een grotere investering in geheugen dan Hadoop, maar die investering betaalt zichzelf binnen afzienbare tijd terug.
Spark en open data
Ik verwacht dat er in de nabije toekomst meer en meer data publiekelijk gedeeld gaat worden door centrale en lokale overheden en publieke instellingen. Al die informatie gaat zorgen voor een nieuw niveau van participatie door burgers, voor het verbeteren van onze levens en het optimaliseren van publieke uitgaven. Apache Spark is een fantastische tool om iedereen met een goed idee te faciliteren en de ideeën snel te valideren op basis van relevante data. Een goed voorbeeld wordt geleverd door Transport for London, met hun open data initiatief. Er werden hackathons georganiseerd waar teams de strijd met elkaar aangingen om nieuwe use cases voor de data te vinden. Het is de beste tijd ooit voor het bouwen van datacentrische oplossingen!
Om te kunnen beoordelen moet u ingelogd zijn: