Nu bedrijven steeds afhankelijker worden van data om hun bedrijven te runnen en te groeien, en Machine learning gevallen uit willen voeren die een solide infrastructuur vereisen, wordt de rol van een data engineer steeds belangrijker.
In deze gids staat alles dat je moet weten over data engineering, waarom het zo’n populaire rol is geworden, wat een data engineer doet en hoe je jouw volgende data engineer succesvol in kunt huren.
Over Data Engineering
Data engineering is het proces van het ontwikkeling en opbouwen van grootschalige data collectie, opslag en analyse systemen. Het is een breed veld dat van toepassing is op bijna elke industrie. Data engineers teams verzamelen en beheren data op grote schaal, met het gebruik van hun kennis en de juiste technologieën om te verzekeren dat de data in een bruikbare staat is op het moment dat het de datawetenschappers, analisten en andere consumenten.
Wat data engineers doen is het bouwen van gedistribueerde systemen die ruw data verzamelen, hanteren en converteren in bruikbare informatie voor datawetenschap teams, machine learning en bedrijfsintelligentie experts om later te gebruiken bij verschillende applicaties.
Data engineers ontwerpen en bouwen pijplijnen die grote stukken informatie transformeren naar een zeer bruikbaar format voordat het de eindgebruikers bereikt. Deze pijplijnen verzamelen gewoonlijk data van verschillende bronnen en slaan het op in enkele Datawarehousing of Data lake opslagplaats die het uniform weergeeft als een enkele bron van informatie.
Het bovenstaande diagram illustreert de werkstroom van een data platform, technologieën die veel gebruikt worden in elke stap en de scope van de verantwoordelijkheden van een data engineer. Zoals je ziet gaat er veel werk zitten in data engineering voordat het geconsumeerd wordt door BI analisten of Datawetenschappers. Onderzoeken hebben aangetoond dat een verbluffende 80% van de inspanning bij data gedreven projecten gaat over data engineering om data klaar voor gebruik te krijgen terwijl 20% gaat waarde creëren met deze data.
Dus het is geen verrassing dat volgens een Stack Overflow enquête uit 2021, de salarissen van data engineers uitkomen op een gemiddeld jaarlijks bedrag van $68.034, waarmee dit beroept stijgt naar het bovenste deel van de salaris grafieken.
Waarom en wanneer moet je een Data Engineer inhuren?
Je moet een data engineer inhuren als je applicaties wilt bouwen op data platformen (data warehouse, data lakes) waarvoor je data vanuit verschillende bronnen moet ophalen en moet bundelen.
Dit is meestal nodig wanneer je ofwel een Machine learning geval hebt dat grote hoeveelheden van data vereist, ofwel wanneer je een gecentraliseerde opslagplaats nodig hebt waarin je al jouw gestructureerde en ongestructureerde data op kunt slaan, dit wordt ook wel een Data Lake of Data Warehouse genoemd.
Soorten data engineers
Big Data-centrische (data) engineer
Een Big data engineer focust op het hanteren van grote datasets. De data wordt gewoonlijk opgeslagen in gedistribueerde bestand systemen of object opslag systemen in plaats van in relationele databases. Om de hoeveelheden van data te hanteren gebruikt een Big Data engineer data verwerking frameworks zoals Spark, MapReduce, of Flink. Alhoewel SQL vaak wordt gebruikt, wordt de meeste programmering gedaan in talen zoals Scala, Python, of Java, waarmee de rol meer gaat lijken op die van een backend ontwikkelaar. Een Big Data Engineer gebruikt gewoonlijk het ETL (Extract, Transform, Load) proces en bouwt batch en datastreaming pijplijnen die gewoonlijk georkestreerd worden door tools zoals Apache Airflow.
Database of Data Warehouse-centrische data engineer
Een database of Data Warehouse-centrische data engineer focust voornamelijk op het extraheren en transformeren van gestructureerde data uit relationele databases. Het proces hier omvat het gebruik van een standaard database managementsysteem, tabel gedreven logica en methodes, database servers en opgeslagen procedures.
Wat doet een data engineer op een dagelijkse basis?
De verantwoordelijkheden en taken van een data engineer bevatten gewoonlijk:
- Identificeren en implementeren re-designs of infrastructuur voor schaalbaarheid
- Optimaliseren van data levering
- Monteren van grote sets van data
- Bouwen van infrastructuur voor data extractie en laden
- Creëren van analytische tools voor de data pijplijn en het leveren van inzicht voor operationele efficiëntie.
Webben hebben Mehmet Ozan Ünal, een data engineer bij Proxify, ook gevraagd naar de dagelijkse functietaken die bij deze positie komen kijken, en hij stelde:
“Data engineers creëren meestal ETL pijplijnen, ontwerp schema’s, en ze houden toezicht op en plannen pijplijnen. Een ander cruciale verantwoordelijkheid is het ontwerpen en opmaken van de data infrastructuren voor het bedrijf. Een data engineer zou de connectie moeten maken tussen data bronnen (bijvoorbeeld SAP, IoT (Internet of Things), en app data) en data consumenten (data analisten, datawetenschappers, zakenmensen, machine learning pijplijnen, bedrijfsintelligentie, en verslaglegging systemen).”
Mehmet Ozan Ünal
Kort samengevat is dit wat een data engineer doet:
- Ontwikkelen en onderhouden van data platformen
- Diepgaande analyse van ruwe data
- Verbeteren van de kwaliteit en efficiëntie van alle data
- Ontwikkelen en testen van architecturen voor het extraheren en transformeren van data
- Bouwen van data pijplijnen
- Bouwen van algoritmes om data efficiënt te verwerken
- Methodes onderzoeken voor data betrouwbaarheid
- Ondersteuning in de ontwikkeling van analytische tools
Interviewen van een Data Engineer
Essentiële technologieën en programmeertalen voor een data engineer
Mehmet noemt de top technologieën die een data engineer moet kennen:
- Programmeertalen: SQL en Python, Scala, of Java
- Tools en systemen: Kafka, Spark, Apache Airflow (om data pijplijnen te orkestreren), Transactionele Databases (MySQL, PostgreSQL), data formats (Parquet, Protobuf, Avro) Codering: Versie Management (Git), Algoritmes, en Data Structuren
- Containerization: CI/CD systemen en Docker
- Cloud: Azure, GCP, of AWS
Er zijn specifieke tools die data engineering efficiënter maken. De top vijf worden hieronder genoemd:
1. Data Warehouses:
- Amazon Redshift: Een cloud data warehouse om data gemakkelijk op te stellen en te schalen.
- Google Big Query: Een cloud data warehouse geweldig voor kleinere beginnende bedrijven die schaling willen.
- Snowflake: Een SaaS die volledig beheerd wordt, levert een platform voor meerdere doeleinden zoals data engineering, data lakes, data warehousing, data app development, en meer.
- Apache Spark: Een analytics engine van open source wordt gebruikt om data op grote schaal te verwerken. Het is een open source project maar het is ook beschikbaar als een op web gebaseerde distributie gecreëerd door de oprichters van Spark genaamd Databricks.
- Google Cloud Data Fusion: Een web UI voor de creatie van integratie oplossingen voor schaalbare data, om data voor te bereiden en te transformeren zonder dat de infrastructuur aangepast hoef te worden.
- Azure Data Factory: Een ETL (Extract, Transform, Load) dienst van Azure om datastromen en integratie te maken zonder dat er van de server gebruikt gemaakt hoeft te worden.
- Dbt: Data Bouw Tool, een tool om data direct in het warenhuis te transformeren, door code te gebruiken voor het algehele proces.
4. Data Lake en Lakehouse:
- Databricks: Een platform dat uniform en open is, en dat gebruikt wordt voor alle data, voornamelijk voor geplande en interactieve data analyses.
- Amazon S3: Een dienst voor object opslag en schaalbaarheid, prestatie en beveiliging van de data die opgeslagen is als een object format.
- Google Cloud opslag: Google service voor het opslaan van objecten en data in de Google cloud.
- Azure Data Lake: Als onderdeel van Microsoft is de Azure Data Lake een publiek platform met diensten en producten voor de analytics van big data.
5. Workflow organisatoren:
- Apache Airflow: Een open-source WMS (workflow management system) tool voor het organiseren, inplannen en controleren van werkstromen.
- Luigi: Een Python tool pakket voor het bouwen, inplannen en orkestreren van pijplijnen.
6. Evenement en stroom verwerking:
- Google Cloud Pub/Sub: Berichtgeving met snelle en onmiddellijke meldingen en notificaties, wat parallelle verwerking en architecturen die evenement gedreven zijn mogelijk maakt.
- Apache Kafka: Ee evenement opslag en open source platform voor stroom verwerking acties.
Technische vaardigheden van een Data Engineer
Een data engineer moet deze cruciale technische vaardigheden hebben:
- Data verzameling – omgaan de grote hoeveelheid data maar ook met de variëteit en snelheid.
- Coderen – vaardigheid in programmeren is cruciaal dus ze moeten een uitstekend begrip hebben van Scala, Java of Python, wat de meest gebruikte talen voor Data engineering systemen en frameworks zijn.
- Data transformeren – de data engineer moet goed zijn in transformeren, bijvoorbeeld, opschonen (e.g. verwijderen van duplicaten), data samenvoegen en het aggregeren van data.
- Data warehousing – weet hoe de DW in lagen te verdelen, en feite tabellen te creëren door de tabellen te combineren en ze te aggregeren om verslaglegging efficiënter te maken.
- Data analyseren – weten hoe inzichten te halen uit een dataset, vooral als het gaat om kwaliteitscontroles, e.g. distributie van data, dubbele rekening, etc.
Mehmet voegde daaraan toe:
“Een goede data engineer moet praktijk kennis en ervaring hebben met coderen en data warehousing. Daarnaast moeten ze ook kennis hebben van basic machine learning, basic data modeling en Linux en shell scripting.”
Top interviewvragen (en antwoorden) voor het beoordelen van Data Engineers
Een uitstekende benadering om de technische vaardigheden van een kandidaat te beoordelen is om t Data engineering specifieke vragen te stellen waarmee je het kaf van het koren kunt scheiden. Om de vaardigheden en expertise van een data engineer te testen en te beoordelen en om zo de beste kandidaat te vinden, kun je vragen naar:
- Vertel wat meer over Hadoop en zijn componenten.
Verwachte antwoord: Hadoop is een open source framework dat wordt gebruikt voor het praktisch en efficiënt opslaan en verwerken van grote datasets. Deze grote sets kunnen verschillen in grootte van gigabyte tot petabyte, en Hadhoop maakt vereenvoudigde clustering van zulke grote hoeveelheden.
Er zijn allereerst vier componenten (1 basis/veelvoorkomend +3 kernen) en bijkomende diepgaande componenten zoals hieronder uitgelegd.
- Hadoop Common – De set van standaard, basis Hadoop libraries.
- Hadoop MapReduce – Voor de verwerking van grootschalige data.
- Hadoop YARN – Voor resource beheer evenals taak planningen.
- HDFS – Hadoop Gedistribueerd Bestand Systeem.
Verder gebruiken we ook:
- Hive en Pig – Voor data toegang
- Apache Flume, Chukwa, Sqoop – Voor data integratie
- HBase – Voor data opslag
- Avro en Thrift – Voor data sterilisatie
- Drill en Apache Mahout – Voor data intelligentie
- Oozie, Zookeeper, en Ambari – Voor data management, orkestratie en controle
- Wat is Block & Block Scanner van HDFS?
Verwachte antwoord: De blocks in HDFS zijn databestanden van de kleinst mogelijke grootte, en ze zijn het resultaat van door Hadoop splitsing van bestanden van enorme grootte.
De Block Scanner helpt ons om lijsten te volgen die de blocks bevatten en het identificeert checksom problemen via throttling (het eenmalig uitvoeren van een functie, ongeacht enige evenement herhalingen).
- Leg uit wat Reducer is en leg de hoofdmethodes ervan uit.
Verwachte antwoord: Wanneer we data verwerken in Hadoop is Mapper de tweede, en Reducer de derde verwerkingsfase.
Reducer heeft drie hoofdmethodes:
- setup() – Met dit commando kunnen we gemakkelijk parameters en cache hanteren en kunnen we eenvoudig de grootte van de input data specificeren.
- cleanup() – Met deze functie kunnen we tijdelijke bestanden verwijderen.
- reduce() – We kunnen dit slechts eenmaal oproepen voor elke taak sleutel, en dit is de essentie van de Reducer.
- Wat is het gebruik van "args" en "kwargs"?
Verwachte antwoord: Zowel args als kwargs zijn functies. Als we een functie moeten specificeren en gebruiken in een commandoregel en order, gebruiken we * args. Anderszins als we moeten wijzen naar een groep van in-line argumenten die niet geordend zijn en die overgaan naar functies, gebruiken we ** kwargs.
- Vergelijk Star Schema en Snowflake Schema.
Verwachte antwoord: In data modellering zijn er twee soorten schema’s voor ontwerpen, Star Schema en Snowflake Schema.
-
Star Schema heeft gedenormaliseerde dimensies of waarde herhaling in een tabel, en het schrijven van aanvragen is makkelijk, aangezien het niet nodig is om meer joins te schrijven. Het is gemakkelijk op te stellen en ook om te ontwerpen. Met Star Schema hebben we overbodige data opgeslagen in dimensie tabellen. Met betrekking tot opslagruimte vereist Star Schema een snellere prestatie in vergelijking tot Snowflake Schema.
-
Snowflake Schema heeft een data structuur, genormaliseerd met hiërarchieën voor dimensies die netjes gepresenteerd worden in aparte tabellen. Dit schema is aanzienlijk complexer voor algeheel onderhoud dan Star. Bij Snowflake is het schrijven van aanvragen niet versimpeld en we hebben meer joins nodig om extra tabellen te linken. Overbodige data wordt vermeden met Snowflake Schema, en dimensie tabellen zijn genormaliseerd. Met Snowflake Schema is er geen vereiste voor een grote opslag ruimte vanwege de redundantie factor (die significanter is in Star, bovenstaand).
- Leg uit wat Secondary NameNode is en benoem de functies.
Verwachte antwoord: Secondary NameNode wordt gebruikt voor het ontvangen van logs of om veranderingen te bewerken van een specifieke naam node. Dit maakt het mogelijk om een limiet in te stellen en te behouden op de log grootte van de bewerkingen.
De functies van Secondary NameNode zijn:
- Checkpoint – We gebruiken dit om de bevestigen en te verzekeren dat we geen corrupte data hebben.
- FsImage – We gebruiken dit als we een kopie van FsImage of een EditLog bestand op moeten slaan.
- Update – Voor een automatisch proces van het updaten van de FsImage en EditLog bestanden, gebruiken we Update.
- NameNode crash – In het geval dat NameNode faalt of crasht, dan kunnen we de NameNode recreëren met het gebruik van FsImage.
- Kun je de verschillende benaderingen van data validatie opnoemen en er wat meer over vertellen?
Verwachte antwoord: We kunnen de volgende onderstaande punten genoemd met de data validatie benaderingen controleren:
- Data – De data type controle maakt het mogelijk om de data te controleren Dus we konden bijvoorbeeld geen op letter gebaseerde data gebruiken in een veld dat enkel op nummers gebaseerde data accepteert.
- Range – Als we moeten controleren of een vooraf gedefinieerd bereik input data bevat, dan voeren we een Range controle uit.
- Code – Wanneer we een bepaald veld selecteren uit een waardenlijst moeten we zorgen dat die lijst geldig is, en dat er nauwkeurige opmaak van dat veld is, dus dat doen we met een code controle.
- Format – We zullen een vooraf gedefinieerde structuur tegenkomen met een heleboel data types. Met een format controle, controleren we of alle datums in het juiste format zijn (bijvoorbeeld DD/MM-YYYY of YYYY/MM/DD).
- Uniekheid – Met een uniekheid controle verzekeren we dat er geen repetitieve items invoeren van items zijn die van karakter uniek moeten zijn, zoals een emailadres of ID inhoud.
- Consistentie – Met een consistentie controle, controleren we of we bouwen op logica wanneer we data met een duidelijke volgorde en hiërarchie van items invoeren. Bijvoorbeeld de ‘datum van productie’ van iets moet gevolgd worden door een ‘uitgifte datum’, niet andersom.
- Wat is DAG in Apache Spark?
Verwachte antwoord: DAG (Directed Acrylic Graph) representeert een Hoekpunten set die gebruikt wordt voor code interpretaties. Dit is een grafiek die elke operatie op de RDD opslaat en presenteert, en het is een uitstekende manier om de flow operaties op te slaan en te beheren. Het biedt topologische volgorde en opeenvolging, en het is een nette visuele presentatie van RDDs.
- Wat is de Spark “lazy evaluation”?
Verwachte antwoord: ‘Lazy evaluation’ in Spark representeert een proces waar actie opgeroepen moet worden, anders zal het proces niet uitgevoerd worden. Dus, Spark is niet te actief of betrokken wanneer we werken aan transformaties, maar wanneer we ween actie oproepen, wordt er een DAG (Directed Acrylic Graph) gecreëerd. Natuurlijk zijn alle transformaties langzaam en lazy, dus operaties in RDD starten niet meteen, Dit si waar Spark goed van pas komt—het verstuurt de transformaties naar een DAG die het zal uitvoeren wanneer er een data aanvraag is van een stuurprogramma.
- Op welke manier is Spark anders als het vergeleken wordt met Hadoop MapReduce?
Verwachte antwoord: Spark is een tool voor data pijplijn hantering, een gedistribueerd verwerkingssysteem, open-source en wordt gebruikt voor het werken met big data. Hadoop MapReduce is een framework voor het versimpeld schrijven van apps die grote scopes van data afhandelen. Wanneer we Spark en Hadoop MapReduce vergelijken kunnen we concluderen dat MapReduce de data verwerkt op de disk, maar Spark data verwerkt in geheugen, en het daar ook behoudt. Bovendien is MapReduce in vergelijking tot Spark langzamer als het gaat om verwerkingssnelheid.
- Wat is het verschil tussen linker, rechter en inner join?
Verwachte antwoord: Linker, Rechter, en Inner join zijn allemaal sleutelwoorden in SQL die gebruikt worden voor het combineren van rijen in een minimum van twee of meer tabellen, en als ze ergens tussen hun in een gemeenschappelijke kolom hebben.
- Inner join – Gebruikt voor de selectie van alle rijen samen vanuit de tabellen. Dit sleutelwoord combineert de rijen van de tabellen die dezelfde identieke gemeenschappelijke veld waarde hebben.
- Linker join – Dit sleutelwoord positioneert de tabelrijen aan de linkerkant van de join en synchroniseert ook de rijen aan de rechterkant van de tabel.
- Rechter join – Dit sleutelwoord haalt de rijen terug in de tabel aan de rechterkant van de join, maar synchroniseert de rijen aan de linkerkant van de tabel. Het lijkt erg op de Linker join.
- Kun je data normalisatie definiëren?
Verwachte antwoord: Het proces van het creëren van schone data staat algemeen bekend als data normalisatie, i.e. het organiseren van data en zijn uniforme format definiëren in meerderen velden en records. Data normalisatie draagt bij en het verwijderen van data die niet gestructureerd of van data die dubbel is, zo blijft er dus enkel data opslag over die logisch en gebruikt is.
Mogelijke uitdagingen tijdens het inhuren van een Data Engineer
Er zijn altijd uitdagingen als je een nieuw iemand aanneemt, afhankelijk van het beroep en de functievereisten.
Een grote uitdaging is dat de scope van de Data Engineer groot en verwarrend is geworden. Het moet niet door elkaar gehaald worden met een van de volgende gerelateerde functies:
- Database Administrator (DBA) wat meer gefocust is op de creatie en optimalisatie van OLTP databases.
- Data Analisten die doorgaans meer gefocust zijn op het aandrijven van bedrijfswaarde door dashboard te creëren en ad-hoc rapporten te bouwen.
- Analytics Engineer wat lijkt op de rol van een Data Analist maar met een vaardigheden set die meer overeenkomt met die van een software engineer (versie controle, CI/CD, gebruik van Python/Scala/Java) en die doorgaans focust op data warehousing SQL pijplijnen en optimalisatie.
- Machine Learning Engineer die vaardig is in het in productie plaatsen van ML modellen die gebouwd zijn door Data Wetenschappers. Het vereist een dieper begrip van statistieken, algoritmes en wiskunde. Sommige Data engineers bezitten deze kennis maar voor een medium tot groot team zou het een rol op zich moeten zijn.
Het moet benadrukt worden dat het inhuur managers/werkgevers vaak de gewoonte hebben om een lager salaris aan te bieden, of een salaris lager dan de marktwaarde voor data engineers. Deze soort ‘uitdaging’ behoort tot de spectrumzijde van de inhuur managers, die ten onrechte intens focussen op alles behalve het lange termijn voordeel van het beschikken over een vaardige data engineer binnen het bedrijf.
Wat onderscheid een geweldige Data Engineer van een goede?
De juiste kandidaat selecteren die het beste is voor de Data Engineer rol kan lastig zijn, vooral als minstens twee kandidaten gelijke ervaring en expertise hebben. Er zal er echter altijd een bovenuit steken met diepgaande kennis, beheersing van technische vaardigheden en een proactieve dynamische denkwijze.
De geweldige Data Engineer:
-
Creëert oplossingen die makkelijk onderhouden worden.
Bijvoorbeeld als handmatige data mapping vereist is om de data op te schonen, maakt de ontwikkelaar dan harde code waardes of creëren ze een bestand dat gemakkelijk geüpdatet kan worden?
-
Begrijpt bedrijfsbehoeftes en maakt passende oplossingen zonder over-engineering.
Het is makkelijk om in de val te trappen van het bouwen van complexere oplossingen dan dat nodig is. Dit kan bijvoorbeeld het bouwen van een bijna real time pijplijn zijn wanneer de daadwerkelijke data verversing behoefte dagelijks is.
Laten we niet vergeten dat het zijn van een teamspeler vooral belangrijk is omdat een data engineer regelmatig zal moeten communiceren met andere teamgenoten die andere rollen hebben (Data Wetenschapper, Data Analist, ML Engineer etc.) en andere bedrijfsteams.
De waarde van Data Engineering
Elk bedrijf kan profiteren van data engineering omdat het bedrijven in staat stelt om meer datagestuurd te worden. Het klinkt misschien vaag maar data engineering is de fundering die jij nodig hebt om jouw data gemakkelijk te consumeren en nauwkeurig te maken zodat je geavanceerde analytics en machine learning gebruiksgevallen kunt inschakelen. Zoals hierboven genoemd, zit 80% van de inspanning van elk data project in data engineering.
Samenvattend legt Mehmet uit:
“Data engineers zijn verantwoordelijk voor het ontwerpen van de algehele datastroom door het bedrijf en voor het creëren en automatiseren van data pijplijnen om deze stroom te implementeren.”
Met zo een individu of team kan een bedrijf vertrouwen op data, weten dat het in goede handen is en dat de data engineers de data feilloos zullen verzamelen, opslaan en verwerken, wat de eerste stap is om een datagestuurd bedrijf te worden.