© Excellent backgrounds/Shutterstock.com
Java Magazin
Streaming-Apps mit Kafka, Spark und Cassandra

Streamingdaten einfach verarbeiten

Im Artikel von Jochen Mader (S. 38) wurde die Ingestion von Daten in ein Kafka-Cluster beschrieben. Nun sollen diese Events natürlich verarbeitet und gespeichert werden. Möglicherweise sollen dabei auch die Vorgänge eines Events berücksichtigt oder ein interner Zustand aktualisiert werden. Außerdem ist es denkbar, die Daten des Streams mit weiteren Informationsquellen zusammenzuführen. All dies ist mit Spark und Cassandra möglich.

Matthias Niehoff


Die Entwicklung von Apache Spark [1] hatte zunächst den Fokus, eine Alternative zu MapReduce im Hadoop-Ökosystem anzubieten. Während es auch heute noch sehr häufig im Hadoop-Umfeld eingesetzt wird und in allen großen Hadoop-Distributionen enthalten ist, hat sich das Projekt stetig weiterentwickelt. Ebenso ist die Anzahl der Konnektoren zur Integration mit anderen Tools gewachsen. Spark ist für den Einsatz in verteilten Umgebungen vorgesehen und setzt auf ein – im Vergleich zu MapReduce – einfaches und flexibles Programmiermodell mit einem intuitiven, ausdrucksstarken API. Außerdem verbessert es die Performance für komplexe Jobs, indem große Teile der Berechnung im Speicher durchgeführt werden. Spark ist vollständig in Scala implementiert und bietet neben einem Scala-API auch Java-, Python-, SQL- und R-Schnittstellen.

Das API von Spark ist an das Collections API von Scala angelehnt und ähnelt ebenso den Streams in Java 8. Alle Beispiele in diesem Artikel sind in Scala geschrieben, lassen sich aber ohne größeren Aufwand auch mit Java 8 abbilden. Listing 1 beschreibt einen WordCount in Spark. Dieser kann mittels Spark Shell ausgeführt werden (Kasten: „Spark Shell ausführen“).

Listing 1val file = sc.textFile("README.txt")val words = file.flatMap(line => line.split(" "))val wordCount = words.map(word => (word,1)).reduceByKey((a,b) => a+b)wordCount.foreach(println)

Spark Shell ausführenDie Spark Shell ist eine Scala REPL, in der bereits ein fertig initialisierter SparkContext bereitsteht. Die Shell kann lokal ausgeführt werden, ohne einen Spark-Cluster aufzusetzen. Dazu muss unter [2] die Spark-Distribution heruntergeladen und entpackt werden. Die REPL findet sich anschließend in /bin/spark-shell. Zusätzlich können über die --packages weitere Bibliotheken hinzugefügt werden, die unter [3] zu finden sind. Alle Beispiele in diesem Artikel wurden mit der Version 1.6.1, „pre-built for Hadoop 2.6 or later“ erstellt.

Der SparkContext, häufig sc abgekürzt, ist der Einstieg in jede Spark-Anwendung. In diesem wird beispielsweise der Name der Anwendung und der Spark-Master festgelegt. Der Spark-Master beschreibt damit auch den Ausführungsort, z. B. local oder ein Cluster. In diesem Beispiel wird zunächst eine Datei zeilenweise eingelesen. Anschließend werden die Zeilen anhand der Leerzeichen aufgeteilt und das entstehende Array geglättet, sodass eine Liste aller Wörter entsteht. Dann wird jedes Wort in ein Tupel bestehend aus dem Wort und „1“ abgebildet. Nun wer...

Java Magazin
Streaming-Apps mit Kafka, Spark und Cassandra

Streamingdaten einfach verarbeiten

Im Artikel von Jochen Mader (S. 38) wurde die Ingestion von Daten in ein Kafka-Cluster beschrieben. Nun sollen diese Events natürlich verarbeitet und gespeichert werden. Möglicherweise sollen dabei auch die Vorgänge eines Events berücksichtigt oder ein interner Zustand aktualisiert werden. Außerdem ist es denkbar, die Daten des Streams mit weiteren Informationsquellen zusammenzuführen. All dies ist mit Spark und Cassandra möglich.

Matthias Niehoff


Die Entwicklung von Apache Spark [1] hatte zunächst den Fokus, eine Alternative zu MapReduce im Hadoop-Ökosystem anzubieten. Während es auch heute noch sehr häufig im Hadoop-Umfeld eingesetzt wird und in allen großen Hadoop-Distributionen enthalten ist, hat sich das Projekt stetig weiterentwickelt. Ebenso ist die Anzahl der Konnektoren zur Integration mit anderen Tools gewachsen. Spark ist für den Einsatz in verteilten Umgebungen vorgesehen und setzt auf ein – im Vergleich zu MapReduce – einfaches und flexibles Programmiermodell mit einem intuitiven, ausdrucksstarken API. Außerdem verbessert es die Performance für komplexe Jobs, indem große Teile der Berechnung im Speicher durchgeführt werden. Spark ist vollständig in Scala implementiert und bietet neben einem Scala-API auch Java-, Python-, SQL- und R-Schnittstellen.

Das API von Spark ist an das Collections API von Scala angelehnt und ähnelt ebenso den Streams in Java 8. Alle Beispiele in diesem Artikel sind in Scala geschrieben, lassen sich aber ohne größeren Aufwand auch mit Java 8 abbilden. Listing 1 beschreibt einen WordCount in Spark. Dieser kann mittels Spark Shell ausgeführt werden (Kasten: „Spark Shell ausführen“).

Listing 1val file = sc.textFile("README.txt")val words = file.flatMap(line => line.split(" "))val wordCount = words.map(word => (word,1)).reduceByKey((a,b) => a+b)wordCount.foreach(println)

Spark Shell ausführenDie Spark Shell ist eine Scala REPL, in der bereits ein fertig initialisierter SparkContext bereitsteht. Die Shell kann lokal ausgeführt werden, ohne einen Spark-Cluster aufzusetzen. Dazu muss unter [2] die Spark-Distribution heruntergeladen und entpackt werden. Die REPL findet sich anschließend in /bin/spark-shell. Zusätzlich können über die --packages weitere Bibliotheken hinzugefügt werden, die unter [3] zu finden sind. Alle Beispiele in diesem Artikel wurden mit der Version 1.6.1, „pre-built for Hadoop 2.6 or later“ erstellt.

Der SparkContext, häufig sc abgekürzt, ist der Einstieg in jede Spark-Anwendung. In diesem wird beispielsweise der Name der Anwendung und der Spark-Master festgelegt. Der Spark-Master beschreibt damit auch den Ausführungsort, z. B. local oder ein Cluster. In diesem Beispiel wird zunächst eine Datei zeilenweise eingelesen. Anschließend werden die Zeilen anhand der Leerzeichen aufgeteilt und das entstehende Array geglättet, sodass eine Liste aller Wörter entsteht. Dann wird jedes Wort in ein Tupel bestehend aus dem Wort und „1“ abgebildet. Nun wer...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang