Bu yazımızda Apache Spark Streaming ne olduğunu ve işleyişini incelemeye çalışacağız.
Apache Spark Streaming Nedir ?
Spark Streaming, Apache Spark projesinin bir alt-projesidir. Apache Spark engine üzerinde çalışır ve gerçek zamanlı işlem (real-time processing) yapmamıza olanak sağlayan bir araçtır.
Not: Apache Spark, batch processing platformudur. Apache Hadoop’un alternatifidir diyebiliriz.
Spark Streaming ile olay bazlı, asenkron, ölçeklenebilir, tip güvenli ve hata tolerans’lı uygulamalar geliştirebiliriz. Farklı event stream’lerden(Kafka, Twitter, TCP socket) gelen gerçek zamanlı datayı kolaylıkla Spark Streaming‘e entegre edebiliriz. Gerçek zamanlı datayı yüksek seviye(high-level) fonksiyonlarla(map, reduce, join, window) işleyebilir ve işlenen datayı veritabanı, live dashboard ve file stream’lere yazabiliriz.
Spark Streaming ile çeşitli alanlarda yüksek hacimli, ölçeklenebilir, güvenilir, güçlü uygulamalar geliştirebiliriz. Aşağıdaki gösterimde Spark Streaming’in bazı uygulama alanlarını görebiliriz.
Apache Spark Streaming’in Çalışma Mantığı
Spark Streaming, event stream’lerdan aldığı live datayı mikro batchlere ayırır, bu mikro data batchler Spark Engine tarafından işlenir. Ve son olarak işlenen data yine mikro batchler olarak çıktıya yönlendirilir.
Her bir data stream için bir tane DStream oluşturulur. Ham data DStream üzerinde tutulur. DStream‘i (Discretized Stream), mikro batch’lerin bir serisi gibi düşünebiliriz. Her bir mikro batch, RDD(Resilient Distributed Dataset) olarak ifade edilir. Her bir RDD, hata toleranslı bir element dizisi tutar. RDD, immutable, read-only ve paralel olarak işlenebilen objedir. Aşağıdaki şekilde de görüleceği gibi bir RDD, DStream üzerinde belli bir zaman aralığındaki datayı tutar.
DStream üzerinden yapılan her bir işlem(map, reduce, window) bu DStream altında bulunan RDD‘ler üzerinde yapılır. Aşağıdaki şekilde basit bir flatMap operasyonun gösterimi mevcuttur.
Bir data kaynağından (Kafka, Twitter) ham datayı DStream ile okuruz. Bu tip DStream’ler input DStream olarak isimlendirilir. Her bir input DStream, bir Receiver ile ilişkilendirilir. Receiver, data kaynağından datayı alır ve daha sonra işlenebilmesi için Spark’ın hafızasında tutar.
Not : Data kaynağı file stream olan DStream’ler için Receiver kullanılmıyor.
Spark Streaming kavramları üzerinde biraz bilgi sahibi olduk. Sonraki yazımızda Spark Stream kullanarak TCP socket üzerinden datayı okuyup, bazı map reduce işlemleri yapacağız.
EOF
Kaynakça :
https://spark.apache.org/docs/latest/streaming-programming-guide.html#
http://planetcassandra.org/apache-spark-streaming/
Geri bildirim: Machine Learning Uygulaması: Giriş | Bahadır AKIN