Apache Spark Nedir, Kurulumu ve Uygulama Örneği

Apache Spark Nedir, Kurulumu ve Uygulama Örneği
12 Eki 2021 · Güncellendi: 10 Ağustos 2026

Apache Spark Nedir, Kurulumu ve Uygulama Örneği

Apache Spark, büyük veri kümeleri üzerinde paralel olarak işlem yapılmasını sağlayan, Scala dili ile geliştirilmiş açık kaynak kodlu kütüphanedir.

Disk bazlı çalışma yapısına sahip olan “MapReduce”un oluşturduğu performans maliyetlerinin çözümüyle ortaya çıkan Spark, bellek içi veri işleme özelliğiyle büyük veri uygulamalarında Apache Hadoop’tan daha hızlı çalışabilmektedir. Dolayısıyla verileri işlerken diskten veri okumadan veya diske veri yazmadan bellekte tutmasıyla Spark’ın analitik motorunun daha hızlı işlemler yapabildiğini söylemek mümkündür. GTech’in bu yazısında, Apache Spark’ın işlevi, öne çıkan özellikleri ve sağladığı faydaları aktaracağız.

Bellek içi veri işleme, Spark’ın temel programlama özeti olan “RDD (Resilient Distributed Datasets)”ler ile yapılmaktadır. RDD’ler elemanlar üzerinde paralel olarak işlemlerin yapılmasını sağlayan, makineler arasında bölünmüş veri koleksiyonlarıdır. RDD’ler oluşturularak diskteki veriler, geçici belleğe taşınmaktadır. Bu RDD’ler üzerinde yapılacak senaryolara göre sorgular yazılarak veriler işlenmektedir.

Apache Spark RDD (Resilient Distributed Dataset) yaşam döngüsü diyagramı

Makine öğrenimi, akış verileri, grafik verileri gibi farklı konularda büyük veri uygulamalarında kullanılabilen Spark, veriyle ilgili çalışan kullanıcılar tarafından tercih edilmektedir. Ayrıca Java, Scala, Python gibi farklı yazılım dilleri ile uygulamalar geliştirilmesine olanak sağlamasıyla popülerliğini artırmaktadır.

Apache Spark Kütüphaneleri

Spark, görselleştirme (grafik işleme), makine öğrenimi, akış işlemleri için çeşitli kütüphanelere sahiptir. Bu kütüphaneler:

Graphx: Grafik sorunlarını çözmek için tasarlanmış ve paralel hesaplamaları sağlayan bir algoritma kütüphanesidir. Grafik olarak bilinen temel bir yapıya sahiptir. Veriler üzerinde gelişmiş analitik prosedürlerin gerçekleşmesine izin verir ve grafiğin görünümlerini görselleştirebilmekte ve verileri ayırt edebilmektedir.

Mlib: Makine öğrenimini bir tür analize dönüştürerek istatiksel işlemler yapılmasını sağlamaktadır.

Streaming: Gerçek zamanlı veriler ile işlemler ve analizler yapılmasına olanak tanımaktadır.

Spark SQL: Yapılandırılmış veriler (structured data) için kullanılan ilişkisel sorgular için uygundur. “Join” işlemlerinde çok hızlı olan bu kütüphane, Spark SQL dilini kullanarak verilerin işlenmesini kolaylaştırmaktadır.

Apache Spark Streaming

Spark Streaming, canlı veri akışlarının ölçeklenebilir, yüksek verimli, hataya dayanıklı akış işlemesini sağlayan temel bir yapıdır. Kafka, Kinesis veya TCP soketleri gibi farklı kaynaklardan verileri alarak karmaşık algoritmalar ile işleyebilmektedir.  Bu verileri dosya sistemlerine, veri tabanlarına ve dashboard’lara gerçek zamanlı olarak aktarabilmektedir.

Spark Streaming veri akışı mimarisi diyagramı

Spark Streaming, aldığı gerçek zamanlı veriyi “mikro batch”lere ayrırarak Spark Engine kısmına yönlendirir. Akışı oluşturmak için Spark Engine tarafından veriler işlenir ve nihai sonuç akışın çıktısına gönderilir.

Spark Streaming'in giriş verisini gruplar (batch) halinde işleme diyagramı

Spark Streaming, sürekli bir veri akışını temsil eden Ayrıklaştırılmış Akış veya DStream adı verilen üst düzey bir soyutlama sağlar. Kaynaktan verileri okuyan ve RDD’lerin üzerine inşa edilen DStream, bir RDD dizisi olarak temsil edilmektedir. RDD’ler DStream üzerinde belli bir zaman aralığındaki veriyi tutmaktadır.

Apache Spark Uygulama Örneği

Örnek olarak çalışan bilgilerin bulunduğu bir veri setini, iki farklı şekilde nasıl ele alınabileceği Apache Spark SQL kullanılarak gösterilmiştir.

Metin dosyası uzantısı olan TXT dosyasında bulunan verileri aşağıdaki şekilde okunması sağlanmış ve SparkConf ve JavaSparkContext ile Spark konfigürasyon ayarlamaları yapılmıştır.

JavaSparkSQL yapılandırma kod örneği

“Employee” adında bir başlangıç RDD oluşturulmuştur ve genellikle bunu dosya sisteminden ya da bir tür veri kaynağından yaratılmaktadır.

JavaRDD ile metin dosyasından Employee nesnesi oluşturma kod örneği

Oluşturulan ilk RDD, Spark‘ın etki alanına sokularak tablo şeklinde kaydedilmiştir.

JavaSchemaRDD ile şema uygulama ve geçici tablo kaydetme kod örneği

Daha sonra farklı bir RDD oluşturulmuştur. Burada ki amaç ilk RDD’de oluşturulan tabloyu işlemek üzere sorgulamaktır. Kullanılan sorguda basit olarak yaşı 13 ila 19 arasında olan çalışanlar sorgulanmaktadır. Ayrıca farklı RDD’ler oluşturularak sorgular genişletilebilir.

Spark SQL sorgusu çalıştırma ve sonuçları işleme kod örneği

Aynı işlemler farklı şekillerde yapılabileceği gibi, veriler de farklı şekilde okunabilmektedir. Dolayısıyla yukarıda yapılan işlemlerde kullanılan veri seti “JSON (JavaScript Object Notation)” formatında da yapılabilmektedir. Fakat çoğunlukla benzer yanları olsa da kullanım şekillerinde farklılıklar göstermektedir.

JSON dosyasında bulunan aynı veri seti için yapılacak işlemler aşağıdaki gibidir;

Yukarıdaki adımlardan farklı olarak burada ilk oluşturacağımız RDD’ de dosyayı tanıtmak olacaktır.

JSON dosyasından JavaSchemaRDD oluşturma kod örneği

Ayrıca veri setinde bulunan alanlar aşağıdaki kod parçacığı ile veri tipleri görüntülenebilmektedir.

'printSchema()' metodunun çağrılması kod örneği

Yine önceki işlemde yapıldığı gibi oluşturulan RDD bir tablo olarak kaydedilip, bu tabloyu sorgulanmak üzere yeni bir RDD oluşturulmuştur.

JSON verisinden oluşturulan geçici tabloda SQL sorgusu çalıştırma kod örneği

İşlemlerin bu adımına kadar olan kısım, çalışmanın ilk kısmının JSON (JavaScript Object Notation) formatı şeklinde nasıl alınabileceğidir. Alternatif olarak list şeklinde yeni bir JSON oluşturulup, yeni bir RDD ile bu JSON verisi tablo şeklinde kaydedilmiştir. Buradaki amaç, işlemlerin sonunda farklı tabloda, çalışan bilgilerini yapılan sorguya göre bulduğumuz ilk sonucun bilgileri olarak işlemlerin sonuna yazdırabilmektir.  Burada yapılan çalışmada olaylar ayrı ayrı ele alınmıştır fakat farklı senaryolarla “join”leme işlemleri de yapılabilmektir.

İç içe (nested) JSON verisiyle JavaRDD işleme kod örneği

Çıktı

Spark uygulama çalıştırma çıktısı - şema ve sorgu sonuçları

Apache Spark hakkında bilgi vererek uygulama örneğiyle kurulumunu detaylı açıkladık. GTech Büyük Veri ve İleri Analitik konusunda uzman ekibimiz ile büyük verilerin analizinde ve hızlı bir şekilde işlenmesinde kullanılan spark uygulamaları hakkında detaylı bilgi için bize ulaşabilirsiniz.

Hazırlayan: GTech Veri Bilimi Ekibi

Kaynakça

Learn Apache Spark from Scratch – Udemy

Kaynak: Mesut Özen Blog – Apache Spark Streaming

Kaynak: Apache Spark Resmi Dokümantasyonu

Kaynak: IBM Cloud Learn – Apache Spark

Kaynak: Intellipaat – Spark RDD Eğitimi