Veröffentlicht am

Aufbau einer Enterprise Search Plattform

Aufbau einer Enterprise-Search-Plattform

Aufbau einer Enterprise Search

Die Anforderungen an eine Enterprise Search sind schnell spezifiziert: Wir wollen eine Suchmaske mit einem Eingabefeld, einer Vorschlagsfunktion während des Tippens und einer Ergebnisliste, in der das wichtigste Dokument zuoberst steht.

Wir sind verwöhnt von Google und Co. Die Messlatte für die Standards liegt hoch. Jahrzehntelange Forschung und Entwicklung stehen hinter diesen Suchsystemen.

Wer eine Enterprise Search aufbauen will, muss sich auf eine längere Entwicklungszeit einstellen.

Der Aufbau einer Unternehmensweiten Suche ist mehr als ein Integrationsprojekt. Dokumente liegen in unterschiedlichen Systemen und sollen mit wenigen Klicks in einer einfachen Suchmaske auffindbar sein. Natürlich steht das beste Dokument ganz oben in der Trefferliste und die Trefferliste ist maßgeschneidert auf den Suchenden.

Ein ehrgeiziges Projekt. Hier die wichtigsten Aspekte, die es zu beachten gilt:

Datenquellen und Mengengerüst

Die Dokumente liegen oft verstreut auf vielen unterschiedlichen Systemen. Sharepoint, Confluent, Filesysteme, CMS-Systeme, Document Management Systeme, Archivsysteme – der Phantasie sind keine Grenzen gesetzt.

Es lohnt sich, zu Projektstart, eine Liste zu erstellen mit

  • den einzelnen Datenquellen,
  • jeweils der ungefähren Anzahl Dokumente,
  • den Fileformaten,
  • den Aktualisierungshäufigkeiten und dem geschätzten Wachstum
  • und den Authentifizierungsmethoden.

Diese Liste  wird helfen, ein passendes System zu evaluieren.

Im Verlauf des Projekts werden die Dokumente aus allen Systemen ausgelesen . Die Enterprise Search Plattform braucht Zugriff auf alle Systeme und muss mit einer Vielzahl von Authentifizierungsmechanismen zurechtkommen.

Auch erwarten wir, dass die Suchmaschine mit den Änderungen der Dokumente synchron ist.

Je nach Quellsystem wird diese Herausforderung anders zu lösen sein.

Fazit

Unternehmensweite Suche – die Anforderungen sind schnell formuliert. Der Aufbau eines Suchsystems jedoch ist sehr anspruchsvoll und aufwändig und benötigt vielfältige Skills.

Laufender Betrieb und Unterhalt

Jedes System muss gepflegt werden. Verteilte Systeme sind aufwendiger.

Die Daten müssen aktuell gehalten werden – vielleicht sogar in Echtzeit.

Die Texte und Dokumente werden von Menschenhand erstellt und der Kreativität sind keine Grenzen gesetzt.

Wir brauchen Qualitätssichrungsmechanismen die bemerken, wenn neue Formate erfunden wurden, die in der Datenkonvertierung noch nicht erkannt werden.

  • Data Engineering ist ja nicht Selbstzweck. Vielmehr dient es dazu, aus Daten Nutzen zu ziehen. Künstliche Intelligenz wurde möglich, dank sorgfältigem Data Engineering.

  • LLM-Tipps & Fachglossar

    Abonniere meinen Newsletter, erhalte regelmäßig Tipps und Tricks über den produktiven Einsatz von LLMs und ich schenke dir mein umfangreiches Fachglossar Von AI-Engineering bis Zero-Shot

  • Chatbot als Lernassistent
  • Prompt Engineering Personas und Wiederholungen
  • AI-Engineering-Fachglossar
  • EBook Tutorial: Cluster aus virtuellen Maschinen
  • Ebook: Apache ZooKeeper
  • Ebook: Realtime Streaming Pipelines
  • LSM-Trees: Log Structured Merge Trees
  • Aufbau einer Enterprise Search
  • Zeit Stream Analytics
  • B-Tree-Index in Datenbanken
  • Ordering Guarantee in Apache Kafka
  • CAP Theorem
  • MapReduce Funktionale Programmierung
  • Konzepte des HDFS
  • Optimistisches Concurrency Control
Veröffentlicht am Schreib einen Kommentar

Daten in die Cloud: Der Trend wird zum Sog

Cloud Data Engineering

[easy-social-share]

Da geh’ ich lieber in die Cloud, da ist alles schon vorhanden” – die Vorstellung ist verlockend:

Nie mehr installieren, deployen, upgraden, administrieren  und sich ausschließlich aufs Wesentliche konzentrieren.

Einige kritische Gedanken zum Sog in die Cloud.

Cloud ist nicht gleich Cloud

Da gibt es Hyperscaler, wie Google, Amazon, Azure, Alibaba – habe ich einen ausgelassen?

Und so wie es am Himmel nicht nur große Wolken gibt, so gibt es in der Cloud auch kleine Anbieter. Das Angebot ist so vielfältig wie die Wolkenformationen am Himmel.

Oft wird unterschieden zwischen IaaS, PaaS und SaaS. Dabei bedeutet “aaS” so viel wie “as a Service” – gemeint ist der Service des Cloud-Anbieters.

Also Infrastruktur (I), Platform (P), Software (S) as a Service.

Und weil’s so schön tönt, sind ganz viele neue aaS dazu gekommen: DBaaS (Datenbank), DaaS (Desktop), FaaS (Function), RaaS (Robot) – der Fantasie sind keine Grenzen gesetzt.

Daten sammeln und analysieren

Bleiben wir bei den Daten,schließlich geht’s hier um Data Engineering und Analytics.

Noch vor zehn Jahren hieß es: “Sammle jetzt Daten und werte sie später aus”.

Diese Sammelwut führte zu Datenfluten.

Jetzt gehen wir dazu über, gezielt Daten zu sammeln und auszuwerten. Wir hoffen, die Fluten so einzudämmen.

Mittlerweile haben wir ja auch bessere Tools und gereiftere Erkenntnisse über unsere Anforderungen und Möglichkeiten.

Herausforderung Infrastruktur

Doch ein Faktor ist oft eine Spaßbremse: Die Infrastruktur.

Wo lagern wir all die Daten? Und wie können wir aus diesen Daten innert nützlicher Frist Erkenntnisse gewinnen?

Wir denken an große Datenmengen und diese benötigen viel Speicherplatz und schnelle Maschinen. Verteiltes Rechnen ist angesagt und dazu benötigen wir Rechenzentren (RZ).

Cloud-RZ – eine Herkulesaufgabe

Ein RZ zu organisieren ist anspruchsvoll: Je nach Größe reicht ein Raum oder man benötigt ein ganzes Gebäude.

Zur Risikominimierung möchten wir vielleicht alles redundant halten – also zwei Gebäude, identisch ausgestattet, am besten an unterschiedlichen Standorten.

  • Der Zugang muss gesichert sein, im Extremfall wie auf dem Flughafen mit Personen-Scanner, Gepäckkontrolle, Leibesvisitation und mindestens mit Ausweiskontrolle.
  • Türen sind mit Batches zu sichern.
  • Bei Einbruch wird Alarm ausgelöst und darauf verlässlich reagiert.
  • Brandschutz ist angesagt – die Low-Cost-Variante ist ein einfacher Rauchmelder. Doch damit sichert man kein großes RZ:
  • Automatisch schließende Brandschutztüren, Gase, die den Brand löschen und den Menschen nicht ersticken und natürlich den heißen Draht zur Feuerwehr, die zur Brandbekämpfung auch die Sicherheitskontrolle passieren muss.
  • Stromausfall muss abgesichert werden, Notstromgeneratoren müssen sofort anspringen, am besten noch, bevor der Strom endgültig ausfällt.
  • Computer dürfen nicht überhitzen, ein Kühlsystem muss sorgfältig geplant werden.
  • Was tun mit der Wärme, wie kann sie sinnvoll genutzt werden?
  • Die Internetanbindung muss schnell und zuverlässig sein.
  • All diese Infrastruktur muss überwacht und gepflegt werden.

Eine Herkulesaufgabe – noch bevor wir den ersten Server aufstellen.

Netzwerk im Cloud-RZ

Server stapeln wir in Racks, diese sind verkabelt mit Strom und Internet. Das Rechnernetzwerk mit Swiches und Routern muss sorgfältig geplant und ausfallsicher konzipiert werden.

Server im Cloud-RZ – langfristig denken

Ist es aufgestellt, dann können wir endlich Server aufstellen, verkabeln und in Betrieb nehmen.

Wie werden wir in ein paar Jahren vorgehen, wenn die Server veraltet sind und ausgetauscht werden sollen?

Ein Konzept dazu sollten wir in der Tasche haben und austesten, bevor wir produktiv gehen.

Software in der Cloud

Jetzt können wir anfangen, an die Software zu denken:

Betriebssysteme, Cluster-Management und die eigentliche Software: Verteilte Filesysteme, Datenbanken, Analytics Engines. Je nachdem, was wir vorhaben.

Und wie gehen wir vor, um neue Releases der Software einzuspielen?

RZ herunterfahren, Release einspielen, Daten migrieren, austesten und RZ hochfahren?

Das war so im letzten Jahrhundert – heute ist 7×24 angesagt, unterbruchsfrei und selbstverständlich mit den neuen Releases.

Eigene Server in der Cloud

Wir mieten beispielsweise nur die RZ-Infrastruktur und wir bringen eigene Server.

Dann sind wir auch selbst verantwortlich für den Unterhalt der Server. Das ist beruhigend, denn die Server gehören uns selbst: wenn wir Cloud-Anbieter wechseln wollen, dann ziehen wir um mit den Servern, bauen sie auf beim neuen Anbieter.

Ein gigantischer Akt – immerhin soll unsere Dienstleistung 7×24 zur Verfügung stehen.

Cloud für Data Analytics

Stoppen wir hier und denken wir wieder über die Cloud für Data Analytics nach.

Beim Hyperscaler gibt es alles einzukaufen:

Nur die Infrastruktur, oder die Plattform oder gar fix fertig konfigurierte Systeme.

Kleinere Player bieten einen Teil der Palette an und glänzen mit kundennahem Service.

Cloud-Plattform mieten

Oder wir mieten die Plattform: Dazu können wir bei vielen Anbietern wählen, ob wir ganze Server oder einzelne virtuelle Maschinen haben wollen. Selbstverständlich mit dem Betriebssystem unserer Wahl und ans Internet angebunden. Auf der Plattform deployen wir unsere Software selbst und lagern unsere Daten.

Und wenn wir eines fernen Tages den Anbieter wechseln wollen? Dann mieten wir halt unsere Server beim neuen Anbieter, installieren dort unsere Software und transferieren unsere Daten.

Das können wahre Datenfluten sein.

Und den Transfer lassen sich die Anbieter zahlen, besonders gut, beim ausgehenden Transfer.

Fazit

“Da geh’ ich lieber in die Cloud, da ist alles schon vorhanden” – bei näherem Hinschauen ein Trugschluss:

Ja, es ist vieles vorhanden, doch es entbindet uns nicht davon, die Zusammenhänge zu begreifen.

Ob Arbeit und Kosten tatsächlich weniger werden, muss sorgfältig evaluiert werden.

Die Preislandschaft und das Wording sind nicht normiert – ein genauer Vergleich ist schwierig.

Dennoch – der Trend in die Cloud wird zum Sog in die Cloud.

Die Cloud wird uns zunehmend beschäftigen.

Die Cloud bringt neue Berufe

Eine Komponente sind die Personalkosten – der Cloud-Anbieter nimmt uns Vieles ab und zahlt die Spezialisten selbst. Und wir zahlen den Cloud-Anbieter.

Nicht umsonst gibt es jetzt Cloud-Engineers, also Spezialistinnen und Spezialisten, die für ein Unternehmen die Cloud organisieren.

Eine wachsende Zahl von Zertifizierungslehrgängen bereichern die Wahlmöglichkeiten – Gerade bei den Hyperscalern, deren Cloud-Angebot so unüberschaubar vielfältig ist, dass man einen Lehrgang absolviert, um sich darin zurechtzufinden.

Software für Data Analytics in der Cloud

Oder wir mieten die Software, fix fertig konfiguriert, einsatzbereit, und mit Security-Groups abgesichert. Dabei denken wir an Umgebungen für Development, Integration und Produktion.

Die Daten lagern wir ebenfalls in der Cloud.

Auch in dem Szenario bedeutet ein Anbieterwechsel einen kostspieligen Datentransfer.

Und sämtliche unsere Programme müssen migriert und getestet werden. Es wäre ein Riesenzufall, wenn der neue Anbieter exakt dieselbe Software und dieselbe Konfiguration anbieten würde, mit der wir unsere Programme, Skripte und Auswertungen entwickelt haben.

Cloud-Anbieter und Cloud-Strategie auswählen und Cloud-Lösung implementieren, das sind anspruchsvolle Aufgaben. Sie sind sorgfältig zu planen und zu evaluieren.

Generative KI produktiv nutzen

  • LLM-Tipps & Fachglossar

    Abonniere meinen Newsletter, erhalte regelmäßig Tipps und Tricks über den produktiven Einsatz von LLMs und ich schenke dir mein umfangreiches Fachglossar Von AI-Engineering bis Zero-Shot

  • Chatbot als Lernassistent
  • Prompt Engineering Personas und Wiederholungen
  • AI-Engineering-Fachglossar
  • EBook Tutorial: Cluster aus virtuellen Maschinen
  • Ebook: Apache ZooKeeper
  • Ebook: Realtime Streaming Pipelines
  • LSM-Trees: Log Structured Merge Trees
  • Aufbau einer Enterprise Search
  • Zeit Stream Analytics
  • B-Tree-Index in Datenbanken
  • Ordering Guarantee in Apache Kafka
  • CAP Theorem
  • MapReduce Funktionale Programmierung
  • Konzepte des HDFS
  • Optimistisches Concurrency Control
Veröffentlicht am

Von Data Warehouse zum Data Lakehouse

Data Lakehouse

Data Lakehouse: Die Bezeichnung ist eine Zusammensetzung aus Data Warehouse und Data Lake, denn diese beiden Konzepte standen Pate. Date Lakehouses eröffnen ungeahnte Perspektiven.

Data Warehouse und ETL – die klassische Lösung

Data Warehouses (DWH) sind ein wichtiges Werkzeug für der Data Analysts. Aus verschiedenen Systemen werden Daten extrahiert, in ein vordefiniertes Format transformiert und danach ins DWH geladen. ETL – so heißt diese Verarbeitungskette also extract-transform-load.

Data Warehouses  wurden in den 90er Jahren modern. Ein Data Warehouse ist optimiert für die Analyse wohl-strukturierter Daten.

Ziel der Datentransformation ist das Star-Schema mit Fakten und Dimensionen. Sind die Daten sauber vereinheitlicht, dann gelingen die wertvollsten Datenanalysen.

Aus den 90ern stammen auch die Grenzen der DWHs:  Sie skalieren vertikal. Die Festplatte wächst  mit dem Datenvolumen. RAID-Systeme helfen, die Festplattenkapazität zu vergrößern.

Doch was tun, wenn selbst das RAID-System an seine Grenzen stößt?

Klassisches Data Warehouse
Daten werden aus den Quellsystemen extrahiert, in der Staging Area ins vordefinierte Star-Schema transformiert und anschließend zur Auswertung ins Data Warehouse geladen.

Data Lakes

Nicht zuletzt dank des WWW brachen Daten in Fluten über uns her und schwemmten neue Technologien zum Speichern und Analysieren an: verteilte Daten Systeme, wie beispielsweise HDFS, das Hadoop Distributed Filesystem.

Ein Data Lake – das ist die Bezeichnung für die Menge der Daten in einem verteilten Big-Data-Filesystem.

Vergleichbar mit allen Daten auf unserem Laptop, aber halt in Big-Data-Dimension.

Zu Beginn der 10er Jahre lautete das Credo:  Zuerst sammeln, dann analysieren. Die Fluten fassen, was wir damit tun, finden wir später heraus.

Datenanalyse im verteilten System

Es entstanden neue Tools, um Daten in verteilten Systemen zu analysieren.  Das Spezielle an den Tools:

Die Programme werden zu den Daten getragen – die Analyse wird verteilt auf die einzelnen Rechner des verteilten Systems. Grundlage ist MapReduce. Hochkomplexe Systeme – entwickelt von tragfähigen Open Source Communities.

Apache Spark ist ein gutes Beispiel:

Apache Spark-Architektur
Spark unterstützt Python, R, Scala, Java und SQL
  • Das Programm zur Datenanalyse wird im Spark-Driver in einen Ausführungsplan umgewandelt.
  • Die Programme zur Analyse werden an die Worker geschickt.
  • Auf jedem Worker liegt ein Teil der Daten.
  • Der Driver koordiniert die oft komplexe Ausführung der verteilten Analyse und bereitet das Endergebnis auf.

Bei jeder Datenanalyse werden die Rohdaten zuerst transformiert und danach analysiert.

Es sind hochkomplexe Systeme und mittlerweile werden sie gerne dort eingesetzt, wo riesige Datenmengen schnell analysiert werden.

Es gibt eine ganze Reihe von Tools, die auf verteilten Systemen arbeiten. In den letzten 10 Jahren wurden sie laufend perfektioniert und die Reise ist noch nicht zu Ende.

ELT

Doch die Realität holt uns auch hier ein: zuverlässige Analyseergebnisse erzielen wir nur auf sauber bereinigten Daten. In einem Data Lake werden die Daten immer wieder transformiert – ein unnötiger Overhead.

Die Verarbeitungskette heißt jetzt ELT – extract-load-transform: Man hole die Daten aus dem Quellsystem, lade sie zuerst in den Data Lake und transformiere sie on demand für die jeweilige Analyse und das immer wieder für jede Analyse.

Data Lakehouses und ELT

Der Bedarf ist erkannt: Data Lakes haben zu wenig Struktur, wir benötigen ähnliche Eigenschaften wie bei Data Warehouses:

  • Katalog mit Metadaten
  • Struktur und Governance
  • Bereinigte Daten in kontrollierten Formaten
ELT im Data Lakehouse
ELT im Data Lakehouse - stark vereinfachte Darstellung.

Anders als ETL in klassischen Data Warehouses wird ELT in Data Lakes/Data Lakehouses gar in Echtzeit ermöglicht:  Analyse Ergebnisse liegen also nahezu sofort vor. Und wir sind nicht beschränkt auf SQL sondern können Machine Learning Modelle nahtlos einbinden.

Data Warehouses vs. Data Lakehouses

Data Lakehouses ist also nicht einfach alter Wein in neuen Schläuchen. Die Tabelle zeigt die markantesten Unterschiede:

Klassisches
Data Warehouse
Data Lakehouse
Skalierbarket vertikal (RAID) horizontal – verteilte Filesysteme
Datenvolumen GB-TB TB – PB – ZB
Datenformat proprietär offen
Analytics Engine proprietär – auch SQL Open Source – auch SQL
Machine Learning (KI) nein ja
Echtzeit ETL / ELT nein ja
Technologische Reife hoch jung – in Entwicklung

Die Grenzen verwischen – das Wording ist unklar – was beispielsweise ist ein Cloud Data Warehouse? Die Marketing Abteilungen sind kreativ.

Die wichtigste Eigenschaft: Data Lakehouses arbeiten mit offenen Dateiformaten. Sind die Daten einmal transformiert, beispielsweise in ein Parquet-Format oder ein Delta Lake-Format, dann sind viele unterschiedliche Tools in der Lage, sie zu analysieren.

Neue Perspektiven für Data Lakes

Offene Systeme sind gefragt. Und so entstehen neue Cloud Dienstleistungen mit den folgenden Eigenschaften.

  • Offene Datenformate für Tabellen, Texte, Bilder, Videos etc
  • Offene Schnittstellen
  • Metadatenkataloge
  • Governance
  • Nochvollziehbarkeit der Veränderungen: Data Lineage – wann wirkte was wie auf den Daten, um zum aktuellen Zustand und Ergebnis zu gelangen.

Dem Data Lake werden also Data Warehouse Eigenschaften verpasst und so entsteht ein Data Lakehouse.

Die Vorteile der Cloud

Ein neuer Schub an Entwicklungen steht uns bevor.

Und da alles Cloud basiert ist, soll es einfach werden, mit einem Klick und gezückter Kreditkarte den Service eines anderen cloudbasierten Providers auf den wohlpräparierten Daten im Lakehouse wirken zu lassen.

Beispielsweise das ultimativ gute Machine Learning Modell eines anderen Cloud Anbieters.

  • Data Engineering ist ja nicht Selbstzweck. Vielmehr dient es dazu, aus Daten Nutzen zu ziehen. Künstliche Intelligenz wurde möglich, dank sorgfältigem Data Engineering.

  • Chatbot als Lernassistent
  • Prompt Engineering Personas und Wiederholungen
  • AI-Engineering-Fachglossar
  • EBook Tutorial: Cluster aus virtuellen Maschinen
  • Ebook: Apache ZooKeeper
  • Ebook: Realtime Streaming Pipelines
  • LSM-Trees: Log Structured Merge Trees
  • Aufbau einer Enterprise Search
  • Zeit Stream Analytics
  • B-Tree-Index in Datenbanken
  • Ordering Guarantee in Apache Kafka
  • CAP Theorem
  • MapReduce Funktionale Programmierung
  • Konzepte des HDFS
  • Optimistisches Concurrency Control
  • Data Engineering ist ja nicht Selbstzweck. Vielmehr dient es dazu, aus Daten Nutzen zu ziehen. Künstliche Intelligenz wurde möglich, dank sorgfältigem Data Engineering.

  • LLM-Tipps & Fachglossar

    Abonniere meinen Newsletter, erhalte regelmäßig Tipps und Tricks über den produktiven Einsatz von LLMs und ich schenke dir mein umfangreiches Fachglossar Von AI-Engineering bis Zero-Shot

Veröffentlicht am

MapReduce – Funktionales Programmieren in verteilten Systemen zur Big-Data Analyse

MapReduce Funktionale Programmierung

Funktionale Programmierung hat einen enormen Auftrieb erfahren. Der Grund: Datenanalyse auf verteilten Filesystemen, wie HDFS, basiert auf funktionaler Programmierung. Erst damit wurde Big-Data-Analyse überhaupt möglich.

Was macht funktionale Programmierung aus? Hier ein ganz einfaches Beispiel in Python.

Wer will, kann gleich abtippen im Online-Playground.

Die Kernidee: In der Parameterliste einer Funktion darf eine Funktion stehen.

Funktion in der Programmierung

Zur Erinnerung die Eigenschaften einer Funktion:

  • sie hat eine Bezeichnung
  • sie nimmt Parameter entgegen – wobei die Parameterliste leer sein kann, oder beliebig viele Elemente beliebiger Datentypen enthalten kann
  • und die Funktion gibt immer genau einen Wert zurück.

Die letzte Eigenschaft unterscheidet die Funktion von einer Prozedur in der prozeduralen Programmierung und von einer Methode in der objektorientierten Programmierung – diese brauchen nicht unbedingt einen Wert zurückzugeben.

Wir stehen also vor zwei Herausforderungen:

  • Wie komme ich zu einer Funktion, wo es noch keine gibt?
  • Was passiert mit der Funktion, die wir als Parameter übergeben?

Beispiel einer Funktion

Python ist eine flexible Sprache – mit vielen Funktionen, aber auch mit objektorientierten Elementen. Und so sind viele praktischen Features als Methode eines Objekts implementiert und andere wiederum als Funktion. Den Unterschied merken wir beim Aufruf der bei einer Funktion anders erfolgt als bei einer Methode.

Das Beispiel zeigt es: Wir zählen die Wörter in einem String.

Dazu zerhacken wir zuerst den String in einzelne Wörter.

Die wunderbare Methode split() erfüllt die Aufgabe:

text = 'Hello World'
text.split()

Ausgabe ist die Liste. Die Elemente einer Liste werden in Python ja von eckigen Klammern umschlossen.

['Hello', 'World']

Python ist ja interpretiert und nicht typsicher. Der Interpreter ist Weltmeister im Ausknobeln des passenden Datentyps. Das macht den Code schlank und erlaubt es auch, in einer Shell oder eben im Online Playground, den Code unmittelbar ausführen zu lassen.

Wollen wir jetzt zählen, wie viele Wörter unser Text hat, dann hilft die Funktion len().

Das geht so:

len(text.split())

Ausgabe ist 2.

Die Funktion len() wird also auf die Liste angewendet, die durch Aufruf der Methode split() auf dem String-Objekt text resultiert.

Diese Code-Zeile ist noch nicht geeignet für die funktionale Programmierung. Wir müssen die Bezeichnung der Variablen text noch loswerden, bezeichnet sie doch das Objekt, von dem die Methode split() abhängt. Bei der funktionalen Programmierung kommen wir damit nicht weitern, diese erlaubt nur Funktionen.

Lambdas helfen

splitcount = lambda x: len(x.split())

So einfach definiert man in Python einen Lambda-Ausdruck.

Der Aufruf sieht so aus und kann unabhängig vom Objekt text für alle möglichen Strings erfolgen.

splitcount(text)

Ergebnis ist 2.

Jetzt sind wir bereit für funktionale Programmierung. Wir haben eine Funktion splitcount, die das gewünschte Verhalten aufweist: Wir haben eine Funktion, die wir auf beliebige Strings anwenden können.

Zur Vorbereitung: Wir wollen wiederum Wörter zählen, doch diesmal die Wörter mehrer Strings, die in einer Liste zusammengefasst sind.

textliste = ['Fischers Fritz', 'fischt frische Fische']

Python macht es uns einfach, die eckigen Klammern umschließen die Elemente der Liste – in diesem Beispiel sind es zwei Strings.

Map Funktion

Und jetzt – Magie:

map(splitcount, textliste)

Die Python-Funktion map erwartet als ersten Parameter eine Funktion – zu dem Zweck haben wir ja splitcount vorbereitet.

Als zweiten Parameter erwartet sie eine Collection, also beispielsweise eine Liste.

Und map wendet jetzt die Funktion auf jedes Listenelement an.

Ergebnis ist die folgende Liste – sie enthält die Anzahl der Wörter der beiden Strings in der Liste textliste:

[2, 3]

Bemerkung am Rande für alle, die abtippen: das Ergebnis wird erzielt mit list(map(splitcount, textliste)) – ohne Cast auf eine Liste erhalten wir nur ein Iterable.

Reduce Funktion

Wir können auch das Gesamtergebnis ermitteln und die Wörter insgesamt zählen.

Dazu benötigen wir eine Funktion, die zwei Elemente zusammenzählt.

Nichts leichter als das:

addiere = lambda x, y: x + y

Das Lambda erledigt den Job. Wir kontrollieren

addiere(1, 2)

Das Ergebnis ist 3.

Und jetzt wieder ein Trick aus der funktionalen Programmierung. Es versteckt sich in der Python3-Library functools, die wir zuerst importieren

import functools as f

Und jetzt können wir reduce anwenden. Diese Funktion erwartet als ersten Parameter eine Funktion, die zwei Parameter nimmt. Dazu haben wir den Lambda-Ausdruck addiere vorbereitet.

Der zweite Parameter von reduce ist eine Collection – also das Ergebnis von map(splitcount(texte)).

f.reduce(addiere, map(splitcount, textliste))

Ergebnis ist 5.

Das MapReduce Programmierkonzept ist Kernstück der Datenanalyse auf verteilten Systemen.

MapReduce

MapReduce ist ein Programmierkonzept, das bei verteiltem Rechnen zum Zuge kommt. Es bedient sich des funktionalen Programmierparadigmas.

Das MapReduce-Programm im Bild zählt Wörter im Text. Dazu zerlegt der Split-Step den Text in Blöcke. Der Map-Schritt wird für jeden Block gleichzeitig ausgeführt und filtert Hinblick auf die Programmlogik die Input-Daten. Hier wird pro Wort ein Schlüssel-Wert-Paar ausgegeben. Der Wert ist 1, was sich aus dem Ziel der Analyse ergibt.

Konzeptionelle Darstellung von MapReduce
Map Reduce - konzeptionell dargestellt. Das Framework stellt den gesamten Workflow sicher. Entwickler entwerfen und codieren eine Abfolge von Map und Reduce-Schritten. Die Darstellung zeigt, wie Wörter in einem Text gezählt werden.

Sind alle Map-Schritte beendet, dann wird der Shuffle/Sort-Schritt ausgeführt. Sortiert sammelt die Zwischenergebnisse der Map-Steps zusammen und sortiert sie nach  Schlüssel.

Danach werden neue Blöcke gebildet und zwar ein Block pro Schlüssel-Wert. Die Reducer-Logik kann für alle Blöcke wiederum zeitgleich erfolgen.

Im Bild werden die 1en addiert und damit die Wörter gezählt.

Danach wird das das Endergebnis zusammengestellt und ans aufrufende Programm zurückgegeben.

Google hat dieses MapReduce-Framework für verteilte Systeme patentieren lassen.

SQL und MapReduce

SQL wird uns als deklarative Abfragesprache noch lange erhalten bleiben. SQL ist hervorragend geeignet für die Datenanalyse – alle Informatikerinnen und Informatiker kennen SQL.

Bei der Datenanalyse mit SQL stehen Aggregatsfunktionen im Mittelpunkt. Hier ein Beispiel:

ID Kunde Land Umsatz
1 Meyer CH 20
2 Müller DE 10
3 Muster CH 40
4 Berger DE 50
5 Huber AT 60

Wir analysieren die Umsatztabelle und wollen den Umsatz pro Land ermitteln:

select land, sum(umsatz) from umsatztabelle group by land

Diese Abfrage können wir ein ein MapReduce-Programm umwandeln.

Die Daten in Blöcke aufspalten – der erste Schritt – kommt in einem verteilten Filesystem wie HDFS gratis. Die Daten liegen dort schon in Blöcke aufgespalten vor.

Map für die SQL-Analyse

Input für den Map-Schritt sind einzelne Zeilen – das Framework ist entsprechend gebaut.

Pro Zeile berücksichtigen wir für unser Beispiel nur das Land und den Umsatz. Die anderen Felder tragen ja nicht bei zur Beantwortung der Analyseaufgabe.

Der Map-Schritt gibt also pro Zeile ein Schlüßel-Wert-Paar zurück:

Land -> Umsatz

Auch der Shuffle/Sort-Schritt braucht uns nicht zu kümmern. Das Framework über nimmt den Schritt und sammelt alle Schlüssel-Wert-Paare die alle Mapper errechnet haben, zusammen, sortiert sie, nach Schlüssel, bildet Pakete und zwar eines pro Schlüsselwert.

AT 60

CH 40
CH 20

DE 10
DE 50

Reduce für die SQL-Analyse

Das Framework schickt jedes Paket so gebildete Paket zu einem Reducer. Gleich wie den Mapper, entwerfen wir auch den Reducer, so dass das Analyseziel erreicht wird.

In unserem Fall zählen wir alle Werte zusammen und geben je ein zur Aufgabenstellung passendes Schlüssel-Wert-Paar zurück.

AT 60
CH 60
DE 60

Das Framework sammelt diese Ergebnisse und stellt sie zu einem Endergebnis zusammen.

Für komplexere Analysen, beispielsweise mit Joins, werden wir mehrere Mapper und je nachdem auch mehrere Reducer programmieren und zu einer geeigneten Abfolge zusammenstellen.

MapReduce aus SQL generieren

Kein Datenanalyst wird produktiv sein, wenn er zuerst seine Logik in MapReduce übersetzen muss. Doch das ist auch gar nicht nötig.

Moderne Big-Data Tools übernehmen diese Übersetzung. Als Analysten überlegen wir SQL und das Framework generiert daraus die passenden Analyse-Jobs und führt sie über dem verteilten System aus.

Fazit

Funktionale Programmierung einerseits und das MapReduce-Framework andrerseits legten das Fundament für die moderne Datenanalyse in verteilten Filesystemen. Die Entwicklungen sind noch nicht zu Ende und laufen in Richtung Echtzeitanalyse und praktische Tools zur Bedienung dieser hochkomplexen Systeme.

  • Data Engineering ist ja nicht Selbstzweck. Vielmehr dient es dazu, aus Daten Nutzen zu ziehen. Künstliche Intelligenz wurde möglich, dank sorgfältigem Data Engineering.

  • LLM-Tipps & Fachglossar

    Abonniere meinen Newsletter, erhalte regelmäßig Tipps und Tricks über den produktiven Einsatz von LLMs und ich schenke dir mein umfangreiches Fachglossar Von AI-Engineering bis Zero-Shot

  • Chatbot als Lernassistent
  • Prompt Engineering Personas und Wiederholungen
  • AI-Engineering-Fachglossar
  • EBook Tutorial: Cluster aus virtuellen Maschinen
  • Ebook: Apache ZooKeeper
  • Ebook: Realtime Streaming Pipelines
  • LSM-Trees: Log Structured Merge Trees
  • Aufbau einer Enterprise Search
  • Zeit Stream Analytics
  • B-Tree-Index in Datenbanken
  • Ordering Guarantee in Apache Kafka
  • CAP Theorem
  • MapReduce Funktionale Programmierung
  • Konzepte des HDFS
  • Optimistisches Concurrency Control