Im heutigen Beitrag werde ich einige Entwicklungen im Big Data Ökosystem ansprechen und den Bereich ganzheitlicher als in meinem letzten Artikel beleuchten.

Zudem stelle ich eine kontroverse Frage in den Raum:

Brauchen wir überhaupt Big Data Analyse?

Oder ist es genauso möglich ohne Big Data Anwendungen gleiche Ergebnisse zu erzielen?

Big Data Tools

Im Big Data Ökosystem gibt es bereits viele Anwendungen, die auf bestimmte Bereiche spezialisert sind. Die wichtigsten dabei sind die open source Tools der Apache Stiftung:

Apache Cassandra: „The Apache Cassandra database is the right choice when you need scalability and high availability without compromising performance.“

Apache Hadoop: „The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models.“

Apache Spark: „Apache Spark is a unified analytics engine for large-scale data processing.“

Wann sind unsere Daten Big Data?

Die klassische Big Data Definition habe ich bereits in diesem Blogbeitrag definiert. In der Praxis greift aber diese Definition viel zu kurz. Auch wenn unsere Daten zu groß für unseren Recher sind, muss es nicht unbedingt bedeuten, dass wir auf Big Data Anwendungen angewiesen sind. Wir könnten zu Beispiel die Daten in kleinere Mengen zerteilen und dann erst analysieren. Pandas in Python erlaubt soche Strategien mit dem „chunksize“ befehl: siehe die ofizielle Dokumentation. Auf diese Weise können wir die Daten aggregieren und in Subsets analysieren. Wir müssen nicht immer das ganze Machine Learning im Hadoop und Spark auf dem gesamten Datensatz starten.

Auf der anderen Seite kann es durchaus vorkommen, dass zwar unsere Daten nicht sehr groß sind, dafür aber die Algorithmen (zum Beispiel Deep Learning), die auf die Daten angewendet werden große Rechenkraft benötigen. In diesem Fall reicht unser Rechner auch häufig nicht und wir die Modelle über die Cloudsysteme fahren müssen.

Diese Beispiele lassen erkennen, dass die klassische Definition der Big Data nicht mehr greift und das Problem deutlich komplexer ist.

Hadoop oder Spark?

Eines der gängigsten Tools für Big Data Analyse war eine Zeit lang das Apache Hadoop Framework. Allerdings wird Hadoop immer häufiger von Apache Spark abgelöst bzw wird Spark zusätzlich zum Hadoop genutzt. Spark ist im gewissen Sinne eine schneller funktionierende Fortsetzung für Hadoop.

Hadoop Ökosystem und Spark

Hadoop Ökosystem habe ich bereits in diesem Beitrag beschrieben. Vom Prinzip dient Hadoop der Speicherung und der Analyse großer Datenmengen.

Hadoop macht dies in mehreren Schritten u.a. mittels Hadooop Storage System (HDFS), MapReduce und dem Hadoop Yarn als den Manager für den gesamten Prozess. Auf dem Hadoop wurden weitere Systeme aufgebaut, die unter anderem SQL- ähnliche Abfragen verwenden wie zum Beispiel Apache Pig und Apache Hive.

Wie bereits gesagt wird Hadoop langsam von Apache Spark abgelöst. Allerdings ist Apache Spark kein Speichersystem und dient nur der Analyse von Massendaten. Spark kann aber Daten aus HDFS lesen ebenso aus anderen Speichersystemen.

Projekt mit Spark – Beispiel

Wie ein Projekt mit Spark ausschauen könnte zeige ich auf meinem Github Profil hier. In diesem Projekt geht es um eine fiktive App namens Sparkify, die dem Musikstreamingdienst Spotify ähnelt. Der Sparkify Datensatz beinhaltet Userdaten, die mit der App interagieren. Der Datensatz ist sehr groß. Wie geht man also bei so einem Projekt mit dem Spark vor?

Zunächst wird ein kleinerer Teil der Daten auf den PC heruntergeladen. Spark kann auch in der sogenannten Local Mode auf eigenem PC genutz werden.

Auf diese Weise kann ein Machine Learning Modell zunächst im Local Mode „entworfen“ werden und auf dem kleineren Datensatz getestet werden.

Im letzten Schritt kann das entworfene Modell im Spark Cluster dann auf dem gesamten Datensatz laufen. So spart man Zeit und Geld.

Die gängigen Anbieter von Spark Cluster Systemen sind AWS und IBM.

Nachteile von Spark – Spark mit Python und SQL

Persönlich fand ich jedoch die Arbeit mit Spark sehr mühsam, denn oft muss man hier eine Mischung aus Python (PySpark) und SQL benutzen. Im Endeffekt, wenn ein Unternehmen auf Big Data mit Spark setzt, muss perspektivisch jemand eingestellt werden, der sich auf diese Themen ausschließlich fokusiert. Dies kann teuer werden.

Weiterer Nachteil ist die Tatsache, dass Spark nicht alle Machine Learning Modelle unterstützt. Spark unterstützt insebsondere ML Modelle, die auf decision trees aufbauen. Diese Modelle tendieren aber häufig zum sogenannten Overfitting, d.h. sie passen sich den gegebenen Daten zu sehr an und sind dann in der Praxis nicht skalierbar. Allerdings, da wir hier häufig mit sehr großen Datenmengen zu tun haben, spielt dieses Argument eventuell nur eine untergeordente Rolle.

Dennoch verbraucht die Anwendung von Spark Ressourcen, Finanzen und Zeit. Dabei haben die Statistiker eigentlich eine schlichte Lösung für die Problematik der Big Data bereits seit Jahrunderten erfunden. Sie heißt: Stichproben…

Stichproben nehmen – Random Sampling

Anstelle des gesamten Datensatzes könnten doch genauso gut kleinere Zufallstichproben aus dem Datensatz erhoben werden.

Die Statistiker vom Statistischen Bundesamt speichern ja auch nicht alle unsere Daten in einem Hadoop Cluster und berechnen dann das durchschnittliche Körpergewicht der Deutschen mit Spark Machine Learning Algorithmen. Sie nehmen kleinere Zufallsstichprobem aus der Gesamtpopulation und berechnen dann den statistischen Durchschnitt. Diese Methode scheint mir bei weitem effizienter zu sein als das gesamte Spark Verfahren.

 

 

*Bild von Johannes Plenio auf Pixabay