Mein Kollege An hat bereits eine Grafik veröffentlicht, die seine Reise bei statworx von Data Science zu Data Engineering dokumentiert. Sein Beitrag zeigt, welche Fähigkeiten Data Engineers für ihre tägliche Arbeit benötigen. Falls dir „Data Engineering“ nichts sagt: es handelt sich dabei um den Bereich, der sich mit der Speicherung, Verarbeitung und Übertragung von Daten auf sichere und effiziente Weise befasst.
In diesem Beitrag werde ich die Anforderungen an diese Tätigkeiten näher erläutern. Da es eine ganze Reihe von Themen zu lernen gibt, schlage ich die folgende Reihenfolge vor:
- Eine Programmiersprache
- Die Grundlagen von git und Versionskontrolle
- Die UNIX-Befehlszeile
- REST-APIs und Grundlagen von Netzwerkarchitekturen
- Datenbanksysteme
- Containerisierung
- Die Cloud
Auch wenn dies von eurer persönlichen Lernerfahrung abweichen mag, habe ich festgestellt, dass diese Reihenfolge für Anfänger leichter zu handhaben ist. Wenn ihr an einer kurzen Übersicht über die wichtigsten Data-Engineering-Technologien interessiert seid, könnte euch auch dieser Beitrag meines Kollegen Andre zum Thema gefallen.
Programmieren lernen – welche Sprachen brauche ich?
Wie in anderen datenbezogenen Berufen ist das Programmieren für Data Engineers eine Pflichtübung. Neben SQL verwenden Data Engineers auch andere Programmiersprachen, um ihre Probleme zu lösen. Unter dieser Vielzahl an verwendbaren Programmiersprachen ist Python aber sicherlich eine der besten Optionen. Python hat sich zur Lingua Franca für datenverwandte Aufgaben entwickelt und eignet sich perfekt für die Ausführung von ETL-Aufgaben und das Schreiben von Datenpipelines. Die Sprache ist nicht nur relativ leicht zu erlernen und syntaktisch elegant, sondern bietet auch die Integration mit Tools und Frameworks (wie Apache Airflow, Apache Spark, REST-APIs und relationale Datenbanksysteme wie PostgresSQL), die im Data Engineering entscheidend sind.
Neben der Programmiersprache werdet ihr euch wahrscheinlich auch für eine IDE (Integrated Development Environment) entscheiden. Beliebte Lösungen für Python sind PyCharm und VSCode. Unabhängig von der Wahl wird eure IDE euch wahrscheinlich in die Grundlagen der Versionskontrolle einführen, da die meisten IDEs eine grafische Schnittstelle zur Verwendung von git und Versionskontrolle haben. Sobald ihr mit den Grundlagen vertraut seid, könnt ihr euch mit git und Versionskontrolle vertraut machen.
git & Versionskontrollwerkzeuge – Versionierung des Quellcodes
In einem agilen Team arbeiten in der Regel mehrere Data Engineers an einem Projekt. Daher ist es wichtig sicherzustellen, dass alle Änderungen an Datenpipelines und anderen Teilen der Codebasis nachverfolgt, überprüft und integriert werden können. Dies bedeutet in der Regel, dass der Quellcode in einem entfernten Code-Verwaltungssystem wie GitHub versioniert wird und dass alle Änderungen vor der Produktionsbereitstellung vollständig getestet werden.
Ich empfehle euch dringend, git über die Kommandozeile zu erlernen, um das volle Potenzial auszuschöpfen. Obwohl die meisten IDEs Schnittstellen zu git bieten, sind bestimmte Funktionen möglicherweise nicht vollständig verfügbar. Darüber hinaus bietet das Erlernen von git auf der Kommandozeile einen guten Einstieg, um mehr über Shell-Befehle zu erfahren.
Die UNIX-Befehlszeile – eine grundlegende Fähigkeit
Viele der Aufgaben, die in der Cloud oder auf lokalen Servern und anderen Frameworks ausgeführt werden, werden mit Shell-Befehlen und Skripten gesteuert. In diesen Situationen gibt es keine grafischen Benutzeroberflächen, weshalb Data Engineers mit der Befehlszeile vertraut sein müssen, um Dateien zu bearbeiten, Befehle auszuführen und im System zu navigieren. Ob bash, zsh oder eine andere Shell, die Anforderung Skripte zu schreiben und somit ohne eine Programmiersprache wie Python Aufgaben automatisieren zu können, ist unvermeidlich, insbesondere auf Servern ohne grafische Oberfläche. Da Befehlszeilenprogramme in so vielen verschiedenen Szenarien verwendet werden, sind sie auch für REST-APIs und Datenbanksysteme nützlich.
REST APIs & Netzwerke – wie Dienste miteinander kommunizieren
Moderne Anwendungen sind in der Regel nicht als Monolithen konzipiert. Stattdessen sind die Funktionalitäten oft in separaten Modulen enthalten, die als Microservices ausgeführt werden. Dadurch wird die Gesamtarchitektur flexibler, und das Design kann leichter weiterentwickelt werden, ohne dass die Entwickler den Code aus einer großen Anwendung herausziehen müssen.
Wie aber können solche Module miteinander kommunizieren? Die Antwort liegt im Representational State Transfer (REST) über ein Netzwerk. Das gängigste Protokoll, HTTP, wird von Diensten zum Senden und Empfangen von Daten verwendet. Es ist wichtig, die Grundlagen darüber zu lernen, wie HTTP-Anfragen strukturiert sind, welche HTTP-Verben typischerweise zur Erfüllung von Aufgaben verwendet werden und wie man solche Funktionalitäten praktisch in der Programmiersprache seiner Wahl implementiert. Python bietet Frameworks wie fastAPI und Flask. In diesem Artikel findet ihr ein konkretes Beispiel für den Aufbau einer REST-API mit Flask.
Netzwerke spielen hier ebenfalls eine wichtige Rolle, da sie die Isolierung wichtiger Systeme wie Datenbanken und REST-APIs ermöglichen. Das Konfigurieren von Netzwerken kann manchmal notwendig sein, weshalb ihr die Grundlagen kennen solltet. Sobald ihr mit REST-APIs vertraut seid, ist es sinnvoll, sich mit Datenbanksystemen zu beschäftigen, denn REST-APIs speichern oft selbst keine Daten, sondern fungieren als standardisierte Schnittstellen zum Zugriff auf Daten aus einer Datenbank.
Datenbanksysteme – Daten organisieren
Als Data Engineer werdet ihr einen beträchtlichen Teil eurer Zeit mit dem Betrieb von Datenbanken verbringen, entweder um Daten zu sammeln, zu speichern, zu übertragen, zu bereinigen oder einfach nur abzufragen. Daher müssen Data Engineers über gute Kenntnisse in der Datenbankverwaltung verfügen. Dazu gehört, dass man SQL (Structured Query Language), die grundlegende Sprache für die Interaktion mit Datenbanken, fließend beherrscht und sich mit einigen der gängigsten SQL-Dialekte auskennt, darunter MySQL, SQL Server und PostgreSQL. Neben relationalen Datenbanken müssen Data Engineers auch mit NoSQL-Datenbanken (“Not only SQL”) vertraut sein, die sich immer mehr zu den bevorzugten Systemen für Big Data und Echtzeitanwendungen entwickeln. Obwohl die Zahl der NoSQL-Engines zunimmt, sollten Data Engineers daher zumindest die Unterschiede zwischen den NoSQL-Datenbanktypen und die Anwendungsfälle verstehen. Wenn ihr Datenbanken und REST-APIs im Griff habt, müsst ihr sie irgendwie bereitstellen. Hier kommen Container ins Spiel.
Containerisierung – Verpackung Ihrer Software
Bei der Containerisierung wird der Softwarecode mit den Betriebssystembibliotheken und Abhängigkeiten, die für die Ausführung des Codes erforderlich sind, zu einer einzigen leichtgewichtigen ausführbaren Datei – einem Container – zusammengefasst. Diese kann konsistent auf jeder Infrastruktur ausgeführt werden. Da Container portabler und ressourceneffizienter sind als virtuelle Maschinen (VMs), haben sie sich de facto zu den Recheneinheiten moderner Cloud-nativer Anwendungen entwickelt. Um besser zu verstehen, wie Container KI-Lösungen skalierbar machen, könnt ihr unser Whitepaper über Container lesen.
Für die Containerisierung von Anwendungen verwenden die meisten Entwickler Docker, ein Open-Source-Tool zum Erstellen von Images und Ausführen von Containern. Zum Verpacken von Code werden fast immer Befehlszeilentools wie das Docker-CLI (Command Line Interface) verwendet. Aber nicht nur Anwendungen oder REST-APIs können containerisiert werden. Data Engineers führen häufig Datenverarbeitungsaufgaben in Containern aus, um die Laufzeitumgebung zu stabilisieren. Solche Aufgaben müssen geordnet und geplant werden, und hier kommen Orchestrierungswerkzeuge ins Spiel.
Orchestrierung – Automatisierung der Datenverarbeitung
Eine der Hauptaufgaben von Data Engineers ist die Erstellung von Datenpipelines mit ETL-Technologien und Orchestrierungs-Frameworks. In diesem Abschnitt könnte man viele Technologien aufzählen, da die Zahl der Frameworks ständig steigt.
Data Engineers sollten einige der bekanntesten kennen oder mit ihnen vertraut sein – wie z.B. Apache Airflow, ein beliebtes Orchestrierungs-Framework für die Planung, Erstellung und Verfolgung von Datenpipelines.
Eine Instanz eines solchen Orchestrierungs-Frameworks selbst zu pflegen, kann recht mühsam sein. Wenn der Technologiestapel wächst, wird die Wartung oft zu einem Vollzeitjob. Um diese Belastung zu verringern, bieten Cloud-Anbieter fertige Lösungen an.
Die Cloud – ohne großen Wartungsaufwand in Produktion
Unter den vielen Cloud-Anbietern ist es sinnvoll, sich für einen der drei großen Anbieter zu entscheiden: Amazon Web Services (AWS), Google Cloud Platform (GCP) und Microsoft Azure. Alle bieten verschiedene Dienste an, um Standardaufgaben des Data Engineering zu lösen, wie z. B. die Aufnahme von Daten, die Planung und Orchestrierung von Datenverarbeitungsschritten, die sichere Speicherung von Daten und deren Bereitstellung für Geschäftsanwender und Datenwissenschaftler. Aufgrund der Fülle der Angebote ist es für Data Engineers sinnvoll, sich bei der Auswahl einer Lösung mit der Preisgestaltung des Anbieters vertraut zu machen.
Wenn ihr z.B. ein gutes Verständnis von Datenbanksystemen habt, sollte das Verständnis von Datenbanksystemen in der Cloud nicht allzu schwierig sein. Bestimmte Technologien wie Apache Spark auf Databricks können jedoch ohne Zugang zur Cloud schwer zu erkunden sein. In diesem Fall würde ich empfehlen, ein Konto bei der Cloud-Plattform eurer Wahl einzurichten und mit dem Experimentieren zu beginnen.
Hoher Aufwand, hohe Belohnung
Fassen wir noch einmal zusammen: Um ein Data Engineer zu werden, sollte man Folgendes lernen:
- Eine Programmiersprache
- Die Grundlagen von git und Versionskontrolle
- Die UNIX-Befehlszeile
- REST-APIs und Grundlagen von Netzwerkarchitekturen
- Datenbanksysteme
- Containerisierung
- Die Cloud
Auch wenn dies nach viel Lernaufwand klingt, solltet ihr euch nicht entmutigen lassen. Praktisch alle der oben aufgeführten Fähigkeiten sind auf andere Rollen übertragbar, so dass das Erlernen dieser Fähigkeiten euch fast unabhängig von eurem genauen beruflichen Werdegang helfen wird. Wenn ihr wie ich einen Data Science Hintergrund habt, werden euch einige dieser Themen bereits vertraut sein. Ich persönlich finde Netzwerkarchitekturen am schwierigsten zu begreifen, da die Arbeit oft von IT-Fachleuten auf der Kundenseite erledigt wird.
Ihr fragt euch wahrscheinlich, wie ihr in die Praxis einsteigen könnt. Die Arbeit an eigenen Projekten wird euch helfen, die Grundlagen der meisten dieser Schritte zu erlernen. Zu den üblichen Data-Engineering-Projekten gehören die Einrichtung von Datenbanksystemen und die Orchestrierung von Aufträgen zur regelmäßigen Aktualisierung der Datenbank. Es gibt viele öffentlich zugängliche Datensätze auf kaggle und APIs, wie z.B. die coinbase API, aus denen ihr Daten für euer persönliches Projekt ziehen könnt. So könnt Ihr eure ersten Schritte zunächst lokal erarbeiten und das Projekt anschließend in die Cloud migrieren.