Een handleiding voor het gebruik van S3, AWS Glue en Athena

 

Als je op een lokale computer werkt met grote hoeveelheden data krijg je al snel te maken met een gebrek aan extra werkgeheugen en opslag, oververhitting van de processor, lange wachttijden etc. Tegenwoordig zijn er steeds meer bedrijven, instanties of projecten die ‘big data’ creëren dat niet meer eenvoudig te analyseren is met je lokale computer. Dit is één van vele andere redenen waarom cloud diensten de afgelopen jaren exponentieel zijn toegenomen in populariteit. Door deze big data op servers in de cloud op te slaan houd je de lokale computeropslag vrij. Tevens zullen de berekeningen of processen die door inhuurbare ‘super’-computers binnen de cloud uitgevoerd kunnen worden aanzienlijk sneller zijn dan als deze lokaal uitgevoerd worden.

De reden dat ik begon te werken in de cloud was dat ik voor een opdracht uit een enorme set verkeersdata (15TB) snel specifieke subsets moest extraheren, om daar vervolgens lokaal mee verder te werken. Met behulp van verschillende diensten in de cloud is dit gemakkelijk, snel en relatief goedkoop te doen. Van de verschillende cloud aanbieders ben ik vanzelf in Amazon Web Services (AWS) gerold en ik merkte op dat er in mijn omgeving nog relatief weinig in de cloud wordt gewerkt. Hierop besloot ik deze blog te schrijven, om zo hopelijk ook anderen voor wie dit nog onbekend terrein is de voordelen van de cloud in te laten zien.

In deze blog zal ik kort uitleggen wat AWS in het algemeen inhoudt. Ook zal ik een drietal populaire diensten uitleggen waarmee je uiteindelijk gemakkelijk en snel queries kan uitvoeren binnen grote datasets. Deze diensten zijn ‘S3’ (Simple Storage Server) voor opslag, ‘AWS Glue’ voor het indexeren van alle data, en ‘Athena’ als interactieve SQL-query dienst. Er zal dieper worden ingegaan op de functie, de voordelen en het gebruik van deze diensten.

 

Je kan overigens gratis een AWS-account aanmaken en de stappen van deze blog direct volgen. Wellicht handig als je al wilt opschalen naar de cloud en bijvoorbeeld ook queries wilt uitvoeren binnen grote datasets, al dient deze blog ook als algemene uitleg over AWS en de drie diensten.

 

‘De cloud’

Er zijn veel verschillende cloudaanbieders, de één met meer diensten dan de ander. Anno 2019 is AWS de marktleider met de meeste gebruikers wereldwijd. Dit is wellicht te verklaren door het feit dat AWS momenteel het grootste aanbod aan diensten heeft. Echter heeft Azure van Microsoft de laatste jaren enorm aan populariteit gewonnen. Azure is net als AWS gebruiksvriendelijk en heeft in vergelijking met AWS veel overeenkomende diensten. Azure zal waarschijnlijk, net als andere cloud aanbieders, AWS in de nabije toekomst evenaren. Tegen die tijd zal het verschil hem dan waarschijnlijk alleen nog maar in de prijzen liggen. Het is altijd goed om alvorens een cloud aanbieder te kiezen je eerst goed te oriënteren welke cloud het beste past bij het werk dat je wilt gaan verrichten. Sinds veel cloud aanbieders meerdere overeenkomende diensten bieden zal het over het algemeen niet veel uitmaken welke cloud je kiest. Uiteraard maakt dit wel uit als je doel zeer specifiek is.

Deze blog zal zich dus verder alleen verdiepen in AWS, al raad ik het zeker aan ook eens naar andere cloud aanbieders te kijken.

 

Een voorbeeld van een greep uit de verschillende cloud aanbieders en de verhoudingen in het gebruik.

 

Amazon Web Services (AWS)

S3, AWS Glue, Athena

AWS bestaat sinds 2006 en biedt na 13 jaar meer dan 160 diensten aan. Je zal ze waarschijnlijk niet allemaal nodig hebben, maar het geeft wel aan dat er erg veel mogelijk is. De verschillende diensten omvatten onder andere: computing, storage, database, mediaservices, machine learning, AR & VR, analytics, migration & transfer en nog veel meer. AWS is een ‘pay-as-you-go’ systeem, wat inhoudt dat je enkel en alleen betaald wanneer je de diensten daadwerkelijk gebruikt. Zo blijven de kosten voor de gebruiker zo laag en overzichtelijk mogelijk.

Mocht je nog geen AWS account hebben maar wil je wel direct de stappen in deze blog volgen, ga dan naar https://aws.amazon.com (of https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/). Het aanmaken van een account is overigens gratis, al is het hebben van een AWS-account niet nodig om de rest van deze blog te volgen! Het dient namelijk ook als algemene informatie over de diensten die uitgelegd zullen worden.

 

De AWS-hoofdpagina ziet er als volgt uit:

 

  • Op deze pagina is direct een duidelijk overzicht te zien van alle diensten die AWS aanbiedt onder het kopje ‘All services’, met daarboven de recentelijk gebruikte diensten als snelkoppeling.
  • Bovenin bij de tab ‘Services’ kan je ook snel zoeken naar een gewenste dienst.
  • Ook belangrijk is de locatie van de servers waarin je werkt, die in dit voorbeeld staat op ‘Frankfurt’.
  • AWS heeft servers verspreidt over de wereld en zo kan je bijvoorbeeld je data op verschillende locaties opslaan, of op verschillende servers je API’s laten draaien. Als er een server down is kan je snel schakelen naar een ander. Dit betekent wel dat als je alles op één server doet en deze server krijgt problemen, dan zit er even niks anders op dan wachten tot de server het weer doet. Spreiding kan enigszins voordeel doen ter preventie.

 

S3

De Simple Storage Service is de meest populaire dienst die AWS aanbiedt. Het is een dienst waar je data kan opslaan in ‘buckets’, oftewel folders in de AWS-omgeving. Hier kan je enorme hoeveelheden aan data kwijt en tevens direct mee aan de slag, aangezien de data al in de AWS-omgeving staat.

 

Deze omgeving ziet er als volgt uit:

 

In de afbeelding hieronder is de inhoud van een nieuwe bucket met de naam ‘blog-example-bucket’ te zien. Hierin kan men eenvoudig bestanden uploaden en folders binnen de bucket maken.

 

 

Echter is het nog gemakkelijker en stabieler om bestanden te uploaden naar of downloaden van een bucket, of bestanden tussen buckets uit te wisselen via je terminal. Configureer hiervoor eerst je AWS-account:

In terminal:

  1. Typ: awsconfigure
  2. Geef je AWS Access Key ID
  3. Geef je AWS Secret Access Key
  4. Geef de gewenste default region name. Als dit al op ‘eu-central-1’ staat dan kan dit zo blijven.
  5. Geef de gewenste default output format. Als dit op ‘None’ staat dan kan dit ook zo blijven.

 

Als dit is gelukt kan je met voorbeelden van de site hieronder gemakkelijk vanuit je terminal opdrachten binnen je S3 omgeving uitvoeren.

https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html#examples

 

Voorbeeld:

Als je het volgende in terminal intypt kopieer je de gehele inhoud van je desbetreffende folder naar bijvoorbeeld de nieuwe ‘blog-example-bucket’ S3 bucket:

 

aws s3 cp /user/path s3://blog-example-bucket/ --recursive

 

(‘–recursive’ houdt in dat de opdracht zich herhaalt voor elk bestand in de gekozen folder.)

 

AWS Glue

Met behulp van AWS Glue kan je jouw data, dat bijvoorbeeld opgeslagen is in S3 buckets, transformeren om vervolgens te analyseren. Deze dienst wordt ook wel een ‘extract, transform, and load’ (ETL) dienst genoemd. In wezen kan je data indexeren zodat het kan fungeren als virtuele SQL-database. Deze virtuele SQL-database kan op zijn beurt bevraagd worden door Athena; een dienst dat verder in deze blog toegelicht zal worden.

 

Het maken van een dergelijke virtuele SQL-database gaat middels een crawler. Deze crawler extraheert en transformeert de data, maakt een table en zet deze table in een database. In Athena kunnen de tables van de databases opgevraagd worden.

 

AWS Glue ziet er als volgt uit:

 

Het maken van een crawler:

  • Klik ‘Add crawler’
  • Geef de crawler een naam. (Je kan hier de crawler een tag, security of classifiers geven, maar dit is niet nodig.) In dit voorbeeld heet de crawler: ‘blog-example-crawler’. Klik ‘Next’.
  • Kies bij ‘Crawler source type’ voor ‘Data stores’. Klik ‘Next’.
  • Vervolgens kies je de data die de crawler gaat gebruiken. De instellingen in dit voorbeeld zijn als volgt:
    – Choose a data store: S3
    – Crawl data in: Specified path in my account
    – Include path: s3://blog-example-bucket
    Klik ‘Next’.
  • Nu kan je een andere data store, bijvoorbeeld andere buckets, toevoegen aan de crawler. In dit voorbeeld houden we het bij de bucket ‘blog-example-bucket’, dus klik je op ‘No’ en daarna ‘Next’.
  • De IAM role geef ik dezelfde naam als hoe ik de crawler heb genoemd (‘blog-example-bucket’), om het overzicht te bewaren. Uiteraard mag dit alles zijn, zolang je het later terug kan vinden. Klik hierna ‘Next’.
  • Bij deze stap (‘Schedule’) kan je instellen wanneer je de crawler wilt runnen. Dit kan ‘on demand’ of periodiek zijn. Let er wel op: de kosten kunnen makkelijk oplopen als je de crawler periodiek laat runnen, vooral als je dit vergeet uit te zetten als het niet meer nodig is. In dit voorbeeld staat het op ‘Run On Demand’. Klik ‘Next’.
  • Nu zijn we aangekomen bij de stap ‘Output’. Als het goed is zal er bij ‘Database’ nog geen database zijn die je kan kiezen, deze zijn namelijk nog niet aangemaakt. Kies hiervoor ‘Add database’, in dit voorbeeld noem ik de database ‘blog-example-database’. Verdere opties zijn niet nodig maar je kan eventueel kijken wat de optionele aanpassingen precies doen. Klik daarna ‘Next’.
  • Dit is een laatste controle voordat je de crawler gaat aanmaken. Zodra alles klopt klik dan ‘Finish’.

 

Het resultaat ziet er als volgt uit:

 

Wanneer er data in de bucket staat waar de crawler overheen gaat en je op ‘Run crawler’ klikt, dan wordt de gehele inhoud van deze bucket geïndexeerd in één table. Deze table kan je vervolgens vinden onder de tab ‘Tables’, links in het menu.

Om het samen te vatten: Je hebt nu een crawler gemaakt die alle bestanden in een specifieke S3 bucket samen heeft gevoegd tot 1 grote table, waarna deze table is opgeslagen in een aangemaakte database.

 

Athena

Athena is een interactieve SQL-query dienst dat een uitstekende tool is om met grote hoeveelheden data te werken. Zoals eerder genoemd kan je de gemaakte tables opvragen die met de crawlers van AWS Glue zijn gemaakt.

 

Athena ziet er als volgt uit:

 

Controleer eerst op welke server je zit. Dit staat rechtsboven aangegeven (in de afbeelding staat het op ‘Ohio’). Wanneer je Athena voor het eerst opent kan het zomaar zijn dat het op een andere server staat ingesteld dan de server waar je in werkte met AWS Glue. Zolang de servers waar je in werkt met Athena en waar je databases (gemaakt met AWS Glue) in staan opgeslagen niet overeenkomen is het dus ook niet mogelijk om in Athena deze databases, en dus de tables, op te vragen.

In het menu aan de linkerkant kan je de gewenste database selecteren die je met AWS Glue hebt aangemaakt, waarna de tables verschijnen die in deze database staan.

Om de table snel te bekijken, doe het volgende:

  • Klik op de drie puntjes achter de door jou gemaakte table die je wilt zien.
  • Klik ‘Preview table’.

De query die automatisch wordt uitgevoerd ziet er vervolgens zo uit:

 

SELECT * FROM "database_naam"."table_naam" limit 10;

 

Het is overigens geen vereiste om in het linker menu de juiste database te selecteren om daarin te werken. Creëer jouw query en vermeld na de statement ‘FROM’ uit welke database je welke table wilt. Dus: FROM “database_naam”.”table_naam”

 

Raadpleeg deze webpagina voor de queries, functions en operators die uit te voeren zijn binnen Athena:

https://docs.aws.amazon.com/athena/latest/ug/functions-operators-reference-section.html

 

Eenmaal de query uitgevoerd is het resultaat onderaan te zien. Bij het icoon wat rood omcirkeld is in het voorbeeld hieronder is het resultaat van de query direct te downloaden als .csv bestand.

 

 

Je kan de gemaakte query overigens gemakkelijk opslaan en later oproepen om verder in te werken.

  • Druk op ‘Save as’ en jouw opgeslagen queries zijn bovenaan terug te vinden in het menu, onder het kopje ‘Saved Queries’.

Ook houdt Athena automatisch de geschiedenis van jouw queries bij. Als je per ongeluk een deel van een query hebt verwijderd, kan je deze gemakkelijk weer terug vinden in hetzelfde menu onder het kopje ‘History’.

 

AWS heeft mij geholpen met het analyseren van verkeersdata waarbij ik binnen 10 minuten verschillende en zeer uitgebreide queries kon uitvoeren om subsets van de 15TB aan data als lokaal .csv bestand te verkrijgen. Met deze subsets kon ik lokaal verdere analyses uitvoeren met Python en R. Naast dit voorbeeld zijn de mogelijkheden binnen deze drie diensten groot, laat staan de mogelijkheden in combinatie met andere diensten. Door de enorme snelheid, de voordelen en het gemak van de diensten zal ik het blijven gebruiken en ben ik benieuwd naar de verdere ontwikkelingen van dit soort cloud diensten. Hopelijk heb ik je als lezer door middel van deze blog ook inzicht kunnen bieden in de voordelen van AWS en van de cloud in het algemeen.

 

Geschreven door Coen, data scientist bij Data Science Lab.