Beispielhaftes IoT-Projekt

Schnell ins Internet of Things mit Apache Hadoop

 (Bild: Mayato GmbH)
(Bild: Mayato GmbH)

Drei zentrale Komponenten

Das Hadoop-System besteht grundlegend aus den drei zentralen Komponenten Datenspeicherung, Ressourcenverwaltung und Datenverarbeitung. Für die Datenspeicherung ist das Hadoop Distributed File System (HDFS) verantwortlich, welches die gespeicherten Daten auf den verschiedenen Computern (Nodes) des Systems ablegt. Damit bei den Ressourcen auf dem Hadoop-Cluster zwischen den Programmen keine Probleme entstehen, gibt es YARN (Yet not another Ressource Negotiator) als Komponente, die die Ressourcen verwaltet. Für die Datenaufbereitung ist MapReduce implementiert, welches ein Programmiermodell darstellt, dass für nebenläufige Berechnungen großer Datenmengen geeignet ist. Zusätzlich hat sich in den letzten Jahren mit Directed-Acyclic-Graph (DAG) ein weiteres Ausführungsverfahren für die Datenverarbeitung entwickelt. Das Hadoop-Ökosystem stellt eine Reihe von Erweiterungen zur Verfügung, die für die oben genannten Anforderungen in Frage kommen. Die Grafik auf der dritten Seite des Beitrages teilt einige Erweiterungen den jeweiligen Anforderungen zu. Es gibt neben den genannten Technologien noch viele weitere, die im Hadoop Umfeld eingesetzt werden können. Dieser Artikel beschränkt sich bewusst auf die zurzeit geläufigsten.

Datenintegration

Apache Sqoop kann für die Übertragung von strukturierten Daten aus relationalen Datenbanken genutzt werden. Sqoop verfügt über keine grafische Benutzeroberfläche, sondern wird über die Kommandozeile bedient. Ein Sqoop-Job besteht dabei aus einem Skript, das durch eine einfache Syntax schnell konfiguriert werden kann. Eine Integration der Daten ist entweder in HDFS oder direkt in HBase bzw. Hive möglich.

Apache Flume kann zum Sammeln, Aggregieren und Verschieben von großen Datenmengen genutzt werden. Gerade die unterschiedlichen Quellen, aus denen Daten gesammelt werden können, machen Flume an dieser Stelle zu einem nützlichen Werkzeug. Ein Flume-Job besteht dabei aus einer Definition der Datenquelle (Source), dem Übertragungsweg (Channel) und des Ziels (Sink). Unter anderem können Daten aus Kafka, NetCat, JMS oder http angebunden und in Ziele wie HDFS, Hive, Kafka oder spezielle Logger geschrieben werden. Als Ergänzungen zu diesen vordefinierten Quellen und Zielen hat der Nutzer die Möglichkeit, den Funktionsumfang durch eigene Quellen und Ziele zu erweitern.

Datenaufbereitung

Apache Hive bietet eine SQL-ähnliche Schnittstelle (HiveQL) an, die es ermöglicht, Datenabfragen analog zu Datenbanksystem zu erstellen. Hierfür können in Hive Tabellen angelegt werden, die den jeweiligen unterliegenden Dateien ein Schema geben. Die Abfragen können in MapReduce, Tez oder Spark Jobs ausgeführt werden. Hierbei werden die SQL-Begriffe in den jeweiligen Quellcode der Ausführungstechnologie umgewandelt. Hive legt die Metadateninformationen über Datentypen der jeweiligen Tabellen in einer eigenen Datenbank, dem Metastore, ab.

Apache Pig bietet dem Anwender die Möglichkeit, Programme auf einer höheren Abstraktionsebene zu erstellen, die in ihren Begrifflichkeiten an SQL erinnert. Die erstellten Programme können als MapRecude, Apache Tez oder Apache Spark Job ausgeführt werden. Die Sprache, in der Pig Programme geschrieben werden, wird Pig Latin genannt. Sie kann mithilfe von User Defined Functions (UDFs) erweitert werden, wobei dem Anwender eine Reihe von Programmiersprachen (u.a. Java, Python) zur Verfügung stehen. Bei Apache Spark handelt es sich um ein Framework, das aus verschiedenen Komponenten besteht und verteilte Rechenleistungen effektiv nutzen kann. Das Framework besteht aus dem Core, der die grundlegenden Infrastruktur-Funktionalitäten bereitstellt. Für die Datenhaltung in Spark ist das sogenannte Resilient Distributed Dataset (RDD) verantwortlich, das den Datenbestand über mehrere Rechner verteilt managen kann. Spark Streaming bietet die Möglichkeit, Datenströme zu verarbeiten. Bei Apache HBase handelt es sich um eine verteilte, nicht relationale Datenbank. HBase ist auf sehr große Datenmengen ausgelegt und kann diese effizient speichern.

Fazit

In unserem Beispiel ging es dem produzierenden Unternehmen darum, schnelle Erfolge bei der ersten Implementierung einer IoT-Plattform zu erzielen und sich gleichzeitig ein hohes Maß an Flexibilität bezüglich der gewählten Ressourcen zu erhalten. Hier empfiehlt sich die Nutzung von Hadoop zur Speicherung der Daten, Sqoop für den Import von Daten aus relationalen Datenbanken und Flume für die Anbindung der zusätzlichen Datenquellen. Diese Daten können in Hive-Tabellen geschrieben und für weitere Anwendungen wie Tableau zur Analyse bereitgestellt werden. Das Aufsetzen der einzelnen Komponenten kann durch die Verwendung einer Hadoop-Distribution wie Cloudera oder Hortonworks beschleunigt werden. Die Erstellung der eigentlichen Beladungsjobs ist mit einem gewissen IT-Know-how schnell erlernbar und kann in bestimmten Bereichen auch automatisiert werden. Durch die Komponentenvielfalt von Hadoop hält sich das Unternehmen die Möglichkeit offen, eine IoT-Plattform zu erschaffen, die auch für zukünftige Szenarien die notwendige Flexibilität bereitstellt und somit Schritt für Schritt mit den Anforderungen wachsen kann.


Patrick Gornig ist Data Warehouse- und ETL-Experte bei Mayato.