Apache Spark Nedir? Büyük Verinin Dağıtık İşleme Motoru

İnternet

Apache Spark, büyük ölçekli verileri tek bir makinenin sınırlarını aşarak çok sayıda makine üzerinde paralel biçimde işlemek için geliştirilmiş açık kaynaklı bir dağıtık veri işleme motorudur. Veri mühendisliği, veri analitiği, makine öğrenimi, SQL tabanlı sorgulama, akış verisi işleme ve büyük veri boru hatları gibi alanlarda kullanılır. Spark’ın temel amacı, büyük veri kümeleri üzerinde hızlı, ölçeklenebilir ve esnek hesaplama yapmayı mümkün kılmaktır.

Bir şirketin her gün milyonlarca işlem kaydı ürettiğini, bir e-ticaret sitesinin tıklama verilerini analiz ettiğini, bir bankanın sahtekârlık tespiti yapmak istediğini, bir telekom şirketinin ağ kayıtlarını işlediğini veya bir yapay zeka ekibinin büyük veri üzerinde özellik çıkarımı yaptığını düşünelim. Bu tür işlerde veri çoğu zaman tek bir bilgisayarın belleğine, işlem gücüne veya disk kapasitesine sığmaz. Apache Spark, bu problemi veriyi parçalara bölüp birden fazla makinede aynı anda işleyerek çözer.

Spark’ı önemli yapan şey yalnızca büyük veriyi işlemesi değildir. Hadoop MapReduce gibi daha eski büyük veri yaklaşımlarına kıyasla bellek içi hesaplama, zengin API’ler, SQL desteği, streaming, makine öğrenimi kütüphanesi ve geniş ekosistem uyumluluğu sunmasıdır. Bu nedenle Spark, modern veri platformlarının temel bileşenlerinden biri hâline gelmiştir.

Bu yazı, Apache Spark’ın ne olduğunu, nasıl çalıştığını, Hadoop MapReduce’tan nasıl ayrıldığını, RDD, DataFrame, Spark SQL, Structured Streaming, MLlib, GraphX, cluster manager, executor, driver ve DAG gibi temel kavramları sade ama derinlikli biçimde açıklar. Ayrıca Spark’ın hangi durumlarda kullanılacağı, hangi durumlarda gereksiz olabileceği ve büyük veri ekosistemindeki yeri ele alınır.

 

Apache Spark Kısa Tanımı

Apache Spark, büyük veriyi dağıtık makineler üzerinde paralel işlemek için kullanılan açık kaynaklı, çok dilli ve birleşik bir veri analitiği motorudur. Python, SQL, Scala, Java ve R gibi dillerle kullanılabilir. Batch veri işleme, streaming veri işleme, SQL analitiği, makine öğrenimi ve grafik işleme gibi farklı görevleri tek bir motor etrafında birleştirir.

Spark’ın temel özellikleri şunlardır:

  • Açık kaynaklıdır.
  • Büyük veri işlemek için tasarlanmıştır.
  • Dağıtık hesaplama yapar.
  • Python, SQL, Scala, Java ve R ile kullanılabilir.
  • Batch ve streaming iş yüklerini destekler.
  • Spark SQL ve DataFrame API ile yapılandırılmış veri işleyebilir.
  • MLlib ile makine öğrenimi iş akışlarını destekler.
  • GraphX ile grafik veri işleme imkânı sunar.
  • Hadoop YARN, Kubernetes ve Standalone gibi cluster yöneticileriyle çalışabilir.
  • HDFS, S3, Parquet, ORC, JSON, JDBC, Hive ve benzeri veri kaynaklarıyla entegre olabilir.

Bu özellikleri nedeniyle Spark, yalnızca bir veri işleme aracı değil, büyük veri ekosisteminin merkezinde yer alan genel amaçlı bir analitik motor olarak görülür.

 

Apache Spark Ne İşe Yarar?

Apache Spark, büyük miktarda veriyi hızlı ve paralel biçimde işlemek için kullanılır. Spark’ın kullanım alanı oldukça geniştir; ancak temel amaç her zaman aynıdır: Büyük veriden anlamlı sonuç üretmek.

Spark şu işler için kullanılabilir:

  • Büyük veri setlerini temizlemek ve dönüştürmek.
  • ETL ve ELT veri boru hatları oluşturmak.
  • Veri ambarı veya data lake üzerinde SQL sorguları çalıştırmak.
  • Log, tıklama, işlem ve sensör verilerini analiz etmek.
  • Gerçek zamanlı veya yakın gerçek zamanlı veri akışlarını işlemek.
  • Makine öğrenimi modelleri için özellik mühendisliği yapmak.
  • Büyük veri üzerinde sınıflandırma, kümeleme veya öneri sistemleri kurmak.
  • Grafik verileri ve ağ ilişkilerini analiz etmek.
  • Raporlama ve iş zekası süreçleri için büyük veri hazırlamak.
  • Yapay zeka ve veri bilimi projelerinde dağıtık veri işleme altyapısı sağlamak.

Örneğin bir banka Spark ile milyonlarca işlem kaydını analiz edip şüpheli davranışları tespit edebilir. Bir yayın platformu kullanıcı izleme geçmişini işleyip öneri sistemleri geliştirebilir. Bir e-ticaret şirketi sipariş, sepet, ürün ve tıklama verilerini birleştirerek müşteri segmentleri oluşturabilir. Bir telekom şirketi ağ olaylarını gerçek zamanlı izleyebilir.

 

Apache Spark Neden Ortaya Çıktı?

Spark, büyük veri işleme dünyasında Hadoop MapReduce’un sınırlılıklarına cevap olarak ortaya çıktı. Hadoop MapReduce, büyük veri işlemede devrim yarattı; çünkü veriyi çok sayıda makineye dağıtarak paralel işleme imkânı sağladı. Ancak MapReduce modeli özellikle tekrarlı algoritmalar, etkileşimli analizler ve çok aşamalı veri işleme işleri için yavaş ve zahmetli olabiliyordu.

MapReduce çoğu işlem adımında ara sonuçları diske yazmaya dayanır. Bu, büyük veri için güvenilir ve ölçeklenebilir bir modeldir; fakat makine öğrenimi gibi iteratif işlemlerde verinin sürekli diske yazılıp tekrar okunması performansı düşürebilir. Spark’ın çıkış noktalarından biri, bu tür işlerde veriyi bellekte tutarak daha hızlı işlem yapabilmekti.

Spark’ın akademik temelinde Resilient Distributed Dataset yani RDD kavramı vardır. RDD, büyük veri kümelerini dağıtık, hata toleranslı ve bellek içinde işlenebilir koleksiyonlar olarak ele alır. Bu yaklaşım, özellikle iteratif algoritmalar ve etkileşimli veri madenciliği için önemli bir avantaj sağlamıştır.

 

Apache Spark Tarihçesi

Apache Spark, 2009 yılında UC Berkeley AMPLab’de bir araştırma projesi olarak başladı. 2010 yılında açık kaynak hâline getirildi. 2013 yılında Apache Software Foundation’a taşındı ve Apache ekosisteminin önemli projelerinden biri oldu. Zamanla yalnızca RDD tabanlı bir hesaplama sistemi olmaktan çıkıp SQL, DataFrame, streaming, makine öğrenimi ve grafik işleme özelliklerini kapsayan birleşik bir analitik platforma dönüştü.

Spark’ın gelişim çizgisinde birkaç önemli dönemeç vardır:

  • RDD Dönemi: Spark’ın temel soyutlaması RDD idi. Dağıtık, hata toleranslı ve bellek içi veri işleme sağlıyordu.
  • DataFrame ve Spark SQL Dönemi: Spark, yapılandırılmış veri işleme ve SQL sorguları için daha yüksek seviyeli API’ler sundu.
  • Structured Streaming Dönemi: Streaming verileri, batch işlemlere benzer DataFrame/Dataset mantığıyla işleme yaklaşımı gelişti.
  • MLlib ve Geniş Ekosistem: Makine öğrenimi, veri bilimi ve veri mühendisliği iş akışları Spark üzerinde birleşti.
  • Cloud ve Kubernetes Dönemi: Spark, modern bulut altyapıları ve Kubernetes gibi orkestrasyon sistemleriyle daha yaygın kullanılmaya başladı.

Bugün Spark, büyük veri dünyasında yalnızca Hadoop ekosisteminin parçası olarak değil, bulut data lake, lakehouse, veri ambarı, makine öğrenimi ve yapay zeka veri hazırlığı süreçlerinde de kullanılan temel bir motordur.

 

Apache Spark Nasıl Çalışır?

Spark’ın çalışma mantığı, büyük bir veri işini küçük parçalara bölmek ve bu parçaları birden fazla makinede paralel olarak yürütmektir. Kullanıcı bir Spark uygulaması yazar. Spark bu uygulamayı analiz eder, yapılacak işlemleri bir yürütme planına dönüştürür ve cluster üzerindeki makinelerde çalıştırır.

Spark mimarisinde birkaç temel bileşen vardır:

  • Driver: Spark uygulamasını yöneten ana süreçtir. İş planını oluşturur, görevleri dağıtır ve sonuçları koordine eder.
  • Executor: Worker makinelerde çalışan ve gerçek hesaplamayı yapan süreçlerdir.
  • Cluster Manager: Kaynakları yöneten sistemdir. Standalone, YARN veya Kubernetes olabilir.
  • Task: Spark’ın executor üzerinde çalıştırdığı küçük iş birimidir.
  • Job: Bir action tetiklendiğinde çalıştırılan daha büyük iş birimidir.
  • Stage: Job’un shuffle sınırlarına göre bölünmüş aşamalarıdır.
  • DAG: Spark’ın işlemleri yönlü çevrimsiz grafik biçiminde planlamasıdır.

Kullanıcı bir DataFrame üzerinde filtreleme, gruplama, join veya aggregation işlemleri tanımladığında Spark bunları hemen çalıştırmayabilir. Önce bir mantıksal plan oluşturur. İşlem gerçekten bir sonuç gerektirdiğinde Spark bu planı optimize eder, fiziksel plana dönüştürür ve cluster üzerinde yürütür.

 

Driver Nedir?

Driver, Spark uygulamasının beyni gibi düşünülebilir. Kullanıcının yazdığı kod driver üzerinde başlar. Driver, SparkSession veya SparkContext aracılığıyla cluster ile iletişim kurar, yapılacak işlemleri planlar, executor’lara görev gönderir ve genel koordinasyonu sağlar.

Driver’ın görevleri şunlardır:

  • Spark uygulamasını başlatmak.
  • Cluster manager ile kaynak istemek.
  • Yürütme planını oluşturmak.
  • Görevleri executor’lara dağıtmak.
  • Job, stage ve task akışını yönetmek.
  • Hataları izlemek ve gerektiğinde yeniden yürütme sürecini koordine etmek.

Driver kaybolursa uygulama genellikle başarısız olur. Bu nedenle üretim ortamlarında driver’ın kaynakları, konumu ve dayanıklılığı önemlidir.

 

Executor Nedir?

Executor, Spark uygulamasının gerçek hesaplama işlerini yürüten süreçtir. Worker makinelerde çalışır. Driver’dan görev alır, verinin kendi payına düşen parçalarını işler ve sonuçları geri gönderir. Executor’lar ayrıca bellekte veri tutabilir, cache veya persist edilen parçaları saklayabilir.

Executor’ların görevleri şunlardır:

  • Task çalıştırmak.
  • Veri parçalarını işlemek.
  • Ara sonuçları bellekte veya diskte tutmak.
  • Shuffle sırasında veri değişimi yapmak.
  • Driver’a durum ve sonuç bilgisi göndermek.

Bir Spark uygulamasının performansı, executor sayısı, executor başına çekirdek sayısı, bellek miktarı, veri yerelliği ve shuffle davranışı gibi faktörlerden etkilenir.

 

Cluster Manager Nedir?

Cluster manager, Spark uygulamalarının hangi makinelerde ve ne kadar kaynakla çalışacağını yöneten bileşendir. Spark kendi Standalone cluster yöneticisiyle çalışabilir; ayrıca Hadoop YARN ve Kubernetes üzerinde de çalışabilir.

Yaygın seçenekler şunlardır:

  • Standalone: Spark’ın kendi basit cluster yöneticisidir.
  • YARN: Hadoop ekosisteminde yaygın kullanılan kaynak yöneticisidir.
  • Kubernetes: Konteyner tabanlı modern altyapılarda Spark uygulamalarını çalıştırmak için kullanılır.

Cluster manager, Spark’ın hesaplama motoru değildir. Görevi kaynak tahsisi ve uygulama yerleşimidir. Hesaplama mantığı Spark driver ve executor’ları tarafından yürütülür.

 

RDD Nedir?

RDD, Resilient Distributed Dataset ifadesinin kısaltmasıdır. Türkçeye “dayanıklı dağıtık veri kümesi” olarak çevrilebilir. RDD, Spark’ın erken dönem temel veri soyutlamasıdır. Büyük bir veri koleksiyonunu farklı makinelere dağıtılmış parçalardan oluşan, hata toleranslı ve değişmez bir yapı olarak temsil eder.

RDD’nin temel özellikleri şunlardır:

  • Dağıtıktır: Veri birden fazla makinede parçalar hâlinde tutulur.
  • Değişmezdir: RDD üzerinde yapılan işlem mevcut RDD’yi değiştirmez; yeni RDD üretir.
  • Hata Toleranslıdır: Kayıp parçalar lineage bilgisiyle yeniden hesaplanabilir.
  • Paralel İşlenebilir: Her veri parçası farklı executor’larda aynı anda işlenebilir.
  • Bellekte Tutulabilir: Tekrar kullanılacak veriler cache veya persist ile saklanabilir.

RDD, Spark’ın MapReduce’a göre önemli avantajlarından birini oluşturdu. Çünkü Spark, veriyi bellekte tutarak iteratif işlemleri daha hızlı yapabiliyordu. Ancak modern Spark kullanımında çoğu kullanıcı RDD yerine DataFrame ve Spark SQL API’lerini tercih eder. Bunun nedeni DataFrame’lerin daha yüksek seviyeli, optimize edilebilir ve SQL uyumlu olmasıdır.

 

DataFrame Nedir?

DataFrame, satır ve sütunlardan oluşan yapılandırılmış veri temsilidir. Pandas DataFrame’e benzer görünebilir; ancak Spark DataFrame dağıtık çalışır. Yani veri tek bir makinede değil, cluster üzerinde parçalara ayrılmış şekilde işlenir.

DataFrame API, Spark kullanıcıları için en önemli yüksek seviyeli arayüzlerden biridir. Kullanıcı veriyi SQL benzeri işlemlerle filtreleyebilir, gruplandırabilir, dönüştürebilir ve birleştirebilir.

DataFrame’in avantajları şunlardır:

  • SQL mantığına yakındır.
  • Python, Scala, Java ve R ile kullanılabilir.
  • Spark’ın optimizer bileşenleri tarafından optimize edilebilir.
  • Parquet, ORC, JSON, CSV, Hive, JDBC ve benzeri kaynaklarla çalışabilir.
  • Büyük veri üzerinde yapılandırılmış analiz yapmayı kolaylaştırır.
  • MLlib ve Structured Streaming ile entegre çalışabilir.

Modern Spark projelerinde DataFrame çoğu zaman ana çalışma arayüzüdür. RDD hâlâ daha düşük seviyeli kontrol gerektiren durumlarda kullanılabilir; fakat veri mühendisliği ve analitik işlerde DataFrame daha yaygındır.

 

Spark SQL Nedir?

Spark SQL, Apache Spark’ın yapılandırılmış verilerle çalışmak için geliştirilmiş modülüdür. Kullanıcılar Spark SQL ile büyük veri üzerinde SQL sorguları çalıştırabilir veya DataFrame API ile programatik analiz yapabilir. Spark SQL, veriyi hem SQL kullanıcıları hem programcılar için erişilebilir hâle getirir.

Spark SQL şu işlerde kullanılır:

  • Büyük veri üzerinde SQL sorguları çalıştırmak.
  • Hive tablolarına erişmek.
  • Parquet, ORC, JSON, CSV ve JDBC kaynaklarını sorgulamak.
  • BI araçları için büyük veri sorgulama katmanı oluşturmak.
  • DataFrame işlemlerini optimize etmek.
  • ETL ve veri dönüşüm süreçleri kurmak.

Spark SQL’in önemi, SQL dünyası ile büyük veri dünyasını birleştirmesidir. Veri mühendisleri Python veya Scala ile kod yazabilirken, veri analistleri SQL ile aynı veri üzerinde sorgular çalıştırabilir. Bu da Spark’ı teknik ekipler ve iş ekipleri arasında ortak zemin hâline getirir.

 

Structured Streaming Nedir?

Structured Streaming, Apache Spark’ın akış verisi işleme yaklaşımıdır. Geleneksel batch işlemde veri belirli aralıklarla toplanır ve sonra işlenir. Streaming işlemde ise veri sürekli akar ve sistem bu veriyi sürekli veya mikro-batch mantığıyla işler.

Structured Streaming’in temel fikri, streaming veriyi de tıpkı sürekli büyüyen bir tablo gibi ele almaktır. Kullanıcı DataFrame ve SQL benzeri API’lerle streaming veri üzerinde işlem tanımlar. Spark ise gelen yeni verileri düzenli biçimde işleyerek sonuç üretir.

Structured Streaming şu durumlarda kullanılabilir:

  • Gerçek zamanlı log analizi.
  • Sensör verisi işleme.
  • Finansal işlem izleme.
  • Sahtekârlık tespiti.
  • Kullanıcı davranışı takibi.
  • IoT veri akışı işleme.
  • Kafka’dan gelen olayları dönüştürme.
  • Gerçek zamanlı dashboard besleme.

Structured Streaming, batch ve streaming API’lerini birleştirdiği için önemlidir. Aynı veri dönüşüm mantığı hem geçmiş veri üzerinde hem canlı veri akışında kullanılabilir.

 

MLlib Nedir?

MLlib, Apache Spark’ın ölçeklenebilir makine öğrenimi kütüphanesidir. Büyük veri üzerinde sınıflandırma, regresyon, kümeleme, öneri sistemleri, özellik dönüştürme, model değerlendirme ve pipeline oluşturma gibi işlemleri destekler.

MLlib’in içerdiği bazı algoritma ve araçlar şunlardır:

  • Lojistik regresyon.
  • Naive Bayes.
  • Lineer regresyon.
  • Karar ağaçları.
  • Random forest.
  • Gradient-boosted trees.
  • K-means.
  • Gaussian mixture models.
  • ALS tabanlı öneri sistemleri.
  • Latent Dirichlet Allocation.
  • Özellik dönüştürme araçları.
  • Pipeline oluşturma.
  • Model değerlendirme.
  • Hiperparametre ayarlama.

MLlib, özellikle verinin tek makineye sığmadığı durumlarda makine öğrenimi iş akışlarını ölçeklendirmek için yararlıdır. Ancak derin öğrenme için Spark tek başına her zaman en uygun araç değildir. Derin öğrenme projelerinde Spark çoğu zaman veri hazırlama, özellik çıkarımı ve büyük veri ön işleme katmanı olarak kullanılır; model eğitimi için PyTorch, TensorFlow veya benzeri kütüphaneler tercih edilebilir.

 

GraphX Nedir?

GraphX, Apache Spark’ın grafik verileri ve grafik paralel hesaplama için sunduğu API’dir. Grafik verisi, düğümler ve kenarlardan oluşur. Sosyal ağlar, bağlantı analizleri, öneri sistemleri, dolandırıcılık ağları, web link grafikleri ve ulaşım ağları grafik verisine örnek olabilir.

GraphX şu tür işler için kullanılabilir:

  • PageRank hesaplama.
  • Bağlı bileşenleri bulma.
  • Topluluk yapısı analizi.
  • Sosyal ağ analizi.
  • İlişki ağları üzerinde iteratif algoritmalar.
  • Graf tabanlı veri keşfi.

GraphX, Spark’ın esnekliğini grafik işlemlerine taşır. Ancak modern grafik işleme dünyasında Neo4j, GraphFrames, TigerGraph veya özel grafik sistemleri de kullanılabilir. Bu nedenle GraphX’in tercih edilip edilmeyeceği, projenin veri hacmine, sorgu tipine ve ekosistem gereksinimlerine bağlıdır.

 

PySpark Nedir?

PySpark, Apache Spark’ın Python API’sidir. Python’un veri bilimi ekosistemindeki yaygınlığı nedeniyle PySpark büyük veri ekiplerinde çok popülerdir. Kullanıcılar Spark’ın dağıtık veri işleme gücünü Python koduyla kullanabilir.

PySpark şu avantajları sunar:

  • Python kullanıcıları için erişilebilirlik sağlar.
  • DataFrame API ile büyük veri üzerinde işlem yapılabilir.
  • Spark SQL, Structured Streaming ve MLlib özellikleri kullanılabilir.
  • Jupyter Notebook ve veri bilimi iş akışlarıyla uyumludur.
  • Pandas bilen kullanıcılar için geçişi kolaylaştırır.

Ancak PySpark kullanırken Python ve JVM arasındaki sınırlar, UDF performansı, veri serileştirme ve cluster kaynak yönetimi gibi konulara dikkat edilmelidir. PySpark kullanmak, Spark’ın dağıtık çalışma mantığını bilmeden büyük veri problemlerini otomatik olarak çözmez.

 

Apache Spark ve Hadoop Farkı

Apache Spark ve Hadoop sıkça karıştırılır. Hadoop geniş bir ekosistemdir; HDFS, YARN ve MapReduce gibi bileşenleri içerir. Spark ise dağıtık veri işleme motorudur. Spark, Hadoop ekosistemiyle birlikte çalışabilir; HDFS üzerinde veri okuyabilir ve YARN üzerinde çalışabilir. Ancak Spark, Hadoop’a bağımlı olmak zorunda değildir.

Temel farklar şunlardır:

  • Hadoop MapReduce: Disk tabanlı, map ve reduce aşamalarına dayalı geleneksel dağıtık işlem modelidir.
  • Apache Spark: Bellek içi işlem yapabilen, DAG tabanlı, daha genel amaçlı bir dağıtık analitik motorudur.
  • HDFS: Hadoop’un dağıtık dosya sistemidir; Spark bu sistemden veri okuyabilir.
  • YARN: Hadoop’un kaynak yöneticisidir; Spark YARN üzerinde çalışabilir.
  • Spark SQL: SQL ve DataFrame tabanlı yüksek seviyeli veri işleme sunar.

Spark, Hadoop’un yerine geçmiş tekil bir sistem olarak görülmemelidir. Daha doğru ifade şudur: Spark, Hadoop MapReduce’un birçok iş yükünde yerini almış güçlü bir veri işleme motorudur; fakat Hadoop ekosistemindeki depolama ve kaynak yönetimi bileşenleriyle birlikte de kullanılabilir.

 

Apache Spark Ve MapReduce Farkı

MapReduce, büyük veri işlemlerini map ve reduce adımlarına bölen programlama modelidir. Basit, güvenilir ve ölçeklenebilir olması nedeniyle uzun süre büyük veri işlemenin temel yaklaşımı oldu. Ancak karmaşık veri boru hatları, etkileşimli analiz ve makine öğrenimi gibi iteratif işlerde sınırlı kalabilir.

Spark ile MapReduce arasındaki farklar şunlardır:

  • Spark, DAG tabanlı daha esnek yürütme planları oluşturabilir.
  • Spark, veriyi bellekte tutarak tekrarlı işlemleri hızlandırabilir.
  • Spark SQL ve DataFrame API daha yüksek seviyeli geliştirme imkânı sunar.
  • Spark, batch, streaming, makine öğrenimi ve grafik işlemleri tek ekosistemde birleştirir.
  • MapReduce daha sınırlı ve disk merkezli bir işlem modelidir.

Bu nedenle Spark özellikle karmaşık veri mühendisliği, veri bilimi ve analitik iş yüklerinde MapReduce’a göre daha esnek bir çözüm sunar.

 

Apache Spark Mimarisinde DAG Nedir?

DAG, Directed Acyclic Graph ifadesinin kısaltmasıdır. Türkçede “yönlü çevrimsiz grafik” olarak çevrilebilir. Spark, kullanıcı işlemlerini bir DAG olarak planlar. Bu grafikte düğümler işlemleri, kenarlar ise veri bağımlılıklarını temsil eder.

DAG yaklaşımı Spark için önemlidir; çünkü sistem işlemleri yalnızca sırayla çalıştırmaz. Hangi işlemlerin birlikte yürütülebileceğini, hangi aşamalarda veri taşınması gerektiğini, hangi noktada shuffle oluşacağını ve hangi planın daha verimli olduğunu değerlendirebilir.

Örneğin bir veri üzerinde önce filtreleme, sonra sütun seçme, sonra gruplama yapılacaksa Spark bu işlemleri optimize ederek daha verimli fiziksel plana dönüştürebilir. Kullanıcı işlem zincirini yazar; Spark bu zinciri yürütülebilir plana çevirir.

 

Lazy Evaluation Nedir?

Spark’ta birçok işlem hemen çalıştırılmaz. Kullanıcı transformation tanımlar; ancak gerçek hesaplama bir action çağrıldığında başlar. Bu yaklaşıma lazy evaluation denir.

Transformation örnekleri:

  • filter
  • select
  • map
  • withColumn
  • groupBy
  • join

Action örnekleri:

  • show
  • count
  • collect
  • write
  • take

Lazy evaluation’ın avantajı, Spark’ın bütün işlem zincirini görüp daha iyi optimize edebilmesidir. Kullanıcı her transformation yazdığında sistem hemen veri işlemez; önce plan oluşturur. Action geldiğinde plan çalıştırılır.

 

Shuffle Nedir?

Shuffle, Spark’ta verinin cluster içinde makineler arasında yeniden dağıtılmasıdır. Grup, join, distinct, orderBy ve bazı aggregation işlemleri shuffle yaratabilir. Shuffle çoğu zaman pahalı bir işlemdir; çünkü veri ağ üzerinden taşınır, disk ve bellek kullanımı artar.

Shuffle gerektiren işlemler şunlar olabilir:

  • groupBy
  • join
  • distinct
  • repartition
  • orderBy
  • reduceByKey

Spark performans sorunlarının önemli bir kısmı shuffle kaynaklı olabilir. Bu nedenle veri bölümlendirme, join stratejisi, broadcast join, partition sayısı, veri skew problemi ve filtrelerin erken uygulanması gibi konular performans için önemlidir.

 

Partition Nedir?

Partition, Spark’ta büyük veri kümesinin işlenebilir küçük parçalara bölünmüş hâlidir. Her partition bir task tarafından işlenebilir. Partition sayısı çok azsa cluster kaynakları yeterince kullanılmayabilir. Çok fazlaysa task yönetim maliyeti artabilir.

Partition stratejisi şu konular için önemlidir:

  • Paralellik düzeyi.
  • Shuffle maliyeti.
  • Veri yerelliği.
  • Executor bellek kullanımı.
  • Dosya yazma sayısı.
  • Join performansı.

Spark performansını anlamak için partition mantığını bilmek gerekir. Çünkü Spark’ın gücü, veriyi parçalara bölüp bu parçaları paralel işleyebilmesinden gelir.

 

Cache ve Persist Nedir?

Spark’ta aynı veri seti birden fazla kez kullanılacaksa cache veya persist ile saklanabilir. Bu, özellikle iteratif işlemler, makine öğrenimi algoritmaları ve tekrar eden analizler için yararlıdır.

Cache, veriyi varsayılan depolama düzeyinde bellekte tutmaya çalışır. Persist, farklı depolama seviyeleri seçmeye imkân verir; örneğin bellek, disk veya serileştirilmiş biçim.

Cache kullanımı performansı artırabilir; ancak yanlış kullanıldığında bellek baskısı yaratabilir. Her DataFrame’i cache etmek doğru değildir. Yalnızca tekrar kullanılacak ve yeniden hesaplanması pahalı olan veri setleri için düşünülmelidir.

 

Apache Spark Hangi Veri Kaynaklarıyla Çalışır?

Spark’ın güçlü taraflarından biri farklı veri kaynaklarıyla çalışabilmesidir. Modern veri platformlarında veriler tek bir yerde durmaz. Dosya sistemleri, data lake’ler, veri ambarları, mesaj kuyrukları ve veritabanları birlikte kullanılır.

Spark yaygın olarak şu veri kaynaklarıyla çalışır:

  • HDFS
  • Amazon S3
  • Azure Data Lake Storage
  • Google Cloud Storage
  • Parquet
  • ORC
  • JSON
  • CSV
  • Avro
  • JDBC kaynakları
  • Hive tabloları
  • Apache Kafka
  • Apache Iceberg
  • Delta Lake
  • Apache Hudi

Bu çeşitlilik Spark’ı data lake ve lakehouse mimarilerinde önemli hâle getirir. Spark çoğu zaman ham veriyi okur, temizler, dönüştürür ve analitik kullanıma hazır hâle getirir.

 

Apache Spark ve Data Lake İlişkisi

Data lake, farklı formatlarda ve büyük hacimlerde verinin merkezi olarak tutulduğu depolama yaklaşımıdır. Spark, data lake üzerindeki verileri işlemek için çok sık kullanılır. Özellikle Parquet, ORC, Delta Lake, Iceberg ve Hudi gibi tablo formatlarıyla birlikte Spark veri gölü mimarilerinin işlem motoru hâline gelebilir.

Spark data lake içinde şu işleri yapabilir:

  • Ham veriyi okuma.
  • Veri temizleme.
  • Format dönüştürme.
  • Veri zenginleştirme.
  • Partition yönetimi.
  • ETL ve ELT boru hatları.
  • Analitik tablolar üretme.
  • Makine öğrenimi için veri hazırlama.

Bu nedenle Spark, yalnızca hesaplama motoru değil, veri mimarisinin operasyonel merkezlerinden biridir.

 

Apache Spark ve Lakehouse İlişkisi

Lakehouse, data lake esnekliği ile veri ambarı yönetilebilirliğini birleştirmeyi hedefleyen modern veri mimarisidir. Spark, lakehouse sistemlerinde sık kullanılan işlem motorlarından biridir. Delta Lake, Apache Iceberg ve Apache Hudi gibi açık tablo formatları, büyük veri dosyalarını ACID işlem, zaman yolculuğu, schema evolution ve metadata yönetimi gibi özelliklerle daha düzenli hâle getirir.

Spark lakehouse mimarisinde şu rolleri üstlenebilir:

  • Ham veriyi bronze katmanına almak.
  • Temizlenmiş veriyi silver katmanına dönüştürmek.
  • İş birimlerine hazır gold tablolar üretmek.
  • SQL analitiği çalıştırmak.
  • Streaming verileri tablo formatlarına yazmak.
  • Makine öğrenimi veri setleri hazırlamak.

Bu ilişki, Spark’ı modern veri mühendisliği dünyasında hâlâ önemli kılar.

 

Apache Spark Nerelerde Kullanılır?

Apache Spark çok farklı sektörlerde kullanılabilir. Büyük veri hacmi, çok kaynaklı veri, hızlı analiz ihtiyacı ve dağıtık işleme gereksinimi olan her yerde Spark anlamlı olabilir.

Yaygın kullanım alanları şunlardır:

  • Finans: Sahtekârlık tespiti, risk analizi, işlem izleme.
  • E-Ticaret: Öneri sistemleri, müşteri segmentasyonu, tıklama analizi.
  • Telekom: Ağ logları, çağrı kayıtları, churn analizi.
  • Medya: İzleme davranışı, içerik önerisi, reklam analitiği.
  • Sağlık: Büyük klinik veri analizi, operasyonel veri işleme.
  • Üretim: Sensör verisi, kalite kontrol, kestirimci bakım.
  • Enerji: IoT verisi, tüketim analizi, şebeke izleme.
  • Kamu: Büyük ölçekli kayıt ve işlem analizi.
  • Yapay Zeka: Büyük veri ön işleme, feature engineering, model veri hazırlığı.

Spark’ın gücü, farklı sektörlerde benzer büyük veri problemlerini çözebilmesinden gelir.

 

Apache Spark Ne Zaman Kullanılmalı?

Spark güçlüdür; ancak her veri problemi için gerekli değildir. Spark kullanmak, altyapı ve operasyon karmaşıklığı getirir. Bu nedenle doğru kullanım alanlarını ayırt etmek önemlidir.

Spark şu durumlarda uygundur:

  • Veri tek makinenin belleğine veya işlem kapasitesine sığmıyorsa.
  • Dağıtık veri işleme gerekiyorsa.
  • Büyük ETL boru hatları kurulacaksa.
  • Çok büyük log, tıklama, işlem veya sensör verisi işlenecekse.
  • Batch ve streaming aynı ekosistemde yönetilecekse.
  • Büyük veri üzerinde SQL analitiği yapılacaksa.
  • Data lake veya lakehouse mimarisi kullanılacaksa.
  • Makine öğrenimi için büyük veri hazırlığı yapılacaksa.

Spark şu durumlarda gereksiz olabilir:

  • Veri küçükse ve tek makinede rahat işleniyorsa.
  • Basit raporlama için ilişkisel veritabanı yeterliyse.
  • Gerçek zamanlı milisaniye gecikme gerekiyorsa.
  • Operasyon ekibi cluster yönetimi yapamayacaksa.
  • Sorun yalnızca birkaç CSV dosyasını analiz etmekse.
  • Pandas, DuckDB veya tek makine SQL motorları yeterliyse.

En sağlıklı yaklaşım, Spark’ı “her veri işi için kullanılacak büyük araç” olarak değil, gerçekten dağıtık işleme gerektiren problemler için tercih etmektir.

 

Apache Spark’ın Avantajları

Apache Spark’ın yaygınlaşmasının temel nedeni, büyük veri işleme için birçok avantajı aynı çatı altında sunmasıdır.

  • Hız: Bellek içi hesaplama ve optimize edilmiş yürütme planları sayesinde birçok iş yükünde hızlı çalışabilir.
  • Ölçeklenebilirlik: Tek makineden binlerce node’a kadar ölçeklenebilir.
  • Çok Dilli Destek: Python, SQL, Scala, Java ve R ile kullanılabilir.
  • Birleşik Motor: Batch, streaming, SQL, makine öğrenimi ve grafik işleme aynı ekosistemde yapılabilir.
  • Geniş Ekosistem: Hadoop, Kafka, Hive, Parquet, Iceberg, Delta Lake, Kubernetes ve bulut servisleriyle entegre olabilir.
  • DataFrame ve SQL API: Analist ve mühendislerin aynı veri üzerinde çalışmasını kolaylaştırır.
  • Hata Toleransı: Dağıtık ortamda veri kayıplarına karşı yeniden hesaplama ve dayanıklılık mekanizmaları sunar.
  • Açık Kaynak Topluluğu: Geniş geliştirici ve kullanıcı topluluğu vardır.

 

Apache Spark’ın Sınırlılıkları

Spark güçlü bir araçtır; ancak sınırsız değildir. Yanlış kullanıldığında pahalı, karmaşık ve yavaş olabilir.

  • Operasyon Karmaşıklığı: Cluster, kaynak, bellek ve dependency yönetimi uzmanlık ister.
  • Shuffle Maliyeti: Büyük join ve groupBy işlemleri ağ ve disk maliyeti yaratabilir.
  • Küçük Veri İçin Aşırı Büyük Olabilir: Basit analizlerde Spark gereksiz karmaşıklık getirir.
  • Debug Zorluğu: Dağıtık işler hata ayıklamayı zorlaştırabilir.
  • Bellek Yönetimi: Yanlış cache kullanımı veya veri skew bellek sorunlarına yol açabilir.
  • Gerçek Zamanlılık Sınırı: Spark Structured Streaming güçlüdür; ancak ultra düşük gecikme gerektiren bazı senaryolarda Flink veya özel sistemler tercih edilebilir.
  • UDF Performansı: Özellikle Python UDF’leri yanlış kullanılırsa performansı düşürebilir.
  • Maliyet: Bulut ortamında yanlış yapılandırılmış Spark işleri yüksek maliyet çıkarabilir.

Bu sınırlılıklar Spark’ın kötü olduğu anlamına gelmez. Spark doğru problemde çok güçlüdür; yanlış problemde ise gereksiz yük yaratabilir.

 

Apache Spark Performansı Nasıl İyileştirilir?

Spark performansı yalnızca daha büyük cluster kurarak iyileştirilmez. Çoğu zaman veri modeli, partition, join stratejisi, dosya formatı ve sorgu planı daha belirleyicidir.

Performans için dikkat edilmesi gerekenler şunlardır:

  • Parquet veya ORC gibi kolon bazlı formatlar kullanmak.
  • Gereksiz sütunları okumamak.
  • Filtreleri erken uygulamak.
  • Partition stratejisini doğru kurmak.
  • Veri skew problemlerini analiz etmek.
  • Büyük shuffle işlemlerini azaltmak.
  • Küçük boyutlu tablolar için broadcast join kullanmak.
  • Gerektiğinde cache/persist kullanmak.
  • UDF yerine built-in fonksiyonları tercih etmek.
  • Spark UI üzerinden job, stage ve task davranışını izlemek.
  • Executor bellek ve çekirdek ayarlarını doğru yapmak.
  • Adaptive Query Execution özelliklerinden yararlanmak.

Spark performans optimizasyonu, çoğu zaman veri mühendisliğinin en önemli uzmanlık alanlarından biridir. Aynı iş iyi yazıldığında dakikalar içinde, kötü yazıldığında saatler içinde bitebilir.

 

Apache Spark ve Yapay Zeka İlişkisi

Yapay zeka projelerinde Spark genellikle modelin kendisinden önceki veri hazırlama aşamasında önemli rol oynar. Büyük veri kümelerini temizlemek, birleştirmek, özellik çıkarmak ve model eğitimine uygun hâle getirmek için Spark kullanılabilir.

Spark yapay zeka süreçlerinde şu işlere yardımcı olabilir:

  • Büyük log verilerini temizlemek.
  • Kullanıcı davranışı verilerinden özellik üretmek.
  • Dağıtık feature engineering yapmak.
  • Eğitim veri setlerini hazırlamak.
  • Veri kalitesini kontrol etmek.
  • Model scoring veya batch inference yapmak.
  • Makine öğrenimi pipeline’ları kurmak.

Derin öğrenme modellerinin eğitimi için Spark tek başına ana araç olmayabilir. Ancak büyük veri hazırlığı ve üretim veri boru hatları için Spark hâlâ çok değerlidir. Özellikle lakehouse mimarilerinde Spark, yapay zeka veri katmanının temel işlem motorlarından biri olabilir.

 

Apache Spark ve Veri Yönetişimi

Spark büyük veri işlerken veri yönetişimi de önemlidir. Büyük veri boru hatları yalnızca hızlı çalışmamalı; aynı zamanda güvenilir, izlenebilir, tekrarlanabilir ve denetlenebilir olmalıdır.

Veri yönetişimi açısından Spark projelerinde şu konular önemlidir:

  • Veri kaynaklarının belgelenmesi.
  • Schema yönetimi.
  • Veri kalitesi kontrolleri.
  • Lineage takibi.
  • Erişim yetkilendirmesi.
  • Kişisel verilerin korunması.
  • Maskeleme ve anonimleştirme.
  • İş akışı izleme.
  • Hata ve yeniden çalışma stratejileri.
  • Tablo formatı ve metadata yönetimi.

Spark tek başına veri yönetişimi çözümü değildir; ancak veri yönetişimi politikalarının uygulandığı işlem katmanlarından biridir.

 

Apache Spark Öğrenmek için Hangi Kavramlar Bilinmelidir?

Spark öğrenmek isteyen bir kişinin yalnızca syntax bilmesi yeterli değildir. Dağıtık hesaplama mantığını ve veri mühendisliği temel kavramlarını anlaması gerekir.

Öncelikli kavramlar şunlardır:

  • Büyük veri.
  • Dağıtık sistemler.
  • Cluster.
  • Partition.
  • RDD.
  • DataFrame.
  • Spark SQL.
  • Lazy evaluation.
  • DAG.
  • Shuffle.
  • Executor.
  • Driver.
  • Cluster manager.
  • ETL ve ELT.
  • Parquet ve kolon bazlı dosya formatları.
  • Data lake ve lakehouse.
  • Streaming veri.
  • Veri kalitesi.

Bu kavramlar öğrenildiğinde Spark yalnızca bir kod kütüphanesi değil, büyük veriyi düşünme biçimi olarak anlaşılır.

 

Sıkça Sorulan Sorular

Apache Spark Nedir?

Apache Spark, büyük veri kümelerini dağıtık makineler üzerinde paralel biçimde işlemek için kullanılan açık kaynaklı, çok dilli ve birleşik bir veri analitiği motorudur.

Apache Spark Ne İşe Yarar?

Spark, büyük veri temizleme, dönüştürme, SQL sorgulama, streaming veri işleme, makine öğrenimi, grafik analizi ve veri mühendisliği boru hatları oluşturma gibi işler için kullanılır.

Apache Spark Hangi Dilleri Destekler?

Spark Python, SQL, Scala, Java ve R gibi dillerle kullanılabilir. Python API’si PySpark olarak bilinir.

Spark SQL Nedir?

Spark SQL, Apache Spark’ın yapılandırılmış veri üzerinde SQL sorguları ve DataFrame API ile analiz yapmayı sağlayan modülüdür.

PySpark Nedir?

PySpark, Apache Spark’ın Python API’sidir. Python kullanıcılarının Spark’ın dağıtık veri işleme özelliklerini kullanmasını sağlar.

RDD Nedir?

RDD, Resilient Distributed Dataset anlamına gelir. Spark’ın erken dönem temel veri soyutlamasıdır ve dağıtık, değişmez, hata toleranslı veri koleksiyonlarını temsil eder.

DataFrame Nedir?

DataFrame, Spark’ta satır ve sütunlardan oluşan yapılandırılmış, dağıtık veri temsilidir. SQL benzeri işlemlerle büyük veri üzerinde analiz yapılmasını kolaylaştırır.

Structured Streaming Nedir?

Structured Streaming, Spark’ın akış verilerini DataFrame ve SQL mantığıyla işlemek için sunduğu streaming veri işleme yaklaşımıdır.

MLlib Nedir?

MLlib, Apache Spark’ın ölçeklenebilir makine öğrenimi kütüphanesidir. Sınıflandırma, regresyon, kümeleme, öneri sistemleri ve pipeline araçları sunar.

Apache Spark ve Hadoop Arasındaki Fark Nedir?

Hadoop geniş bir ekosistemdir; MapReduce, HDFS ve YARN gibi bileşenler içerir. Spark ise dağıtık veri işleme motorudur. Spark, Hadoop ile çalışabilir; ancak Hadoop’a bağımlı değildir.

Apache Spark Ne Zaman Kullanılmalıdır?

Veri tek makineye sığmadığında, büyük ETL süreçleri gerektiğinde, batch ve streaming iş yükleri yönetileceğinde veya data lake/lakehouse mimarisi kurulacağında Spark kullanılabilir.

Apache Spark Küçük Veriler için Uygun mudur?

Genellikle hayır. Küçük veri setlerinde Spark gereksiz karmaşıklık yaratabilir. Bu tür işler için Pandas, DuckDB, PostgreSQL veya benzeri daha basit araçlar yeterli olabilir.

 

Sonuç

Apache Spark, büyük verinin dağıtık biçimde işlenmesini sağlayan modern veri ekosisteminin en önemli motorlarından biridir. Ortaya çıkışında Hadoop MapReduce’un sınırlılıklarına yanıt verme amacı olsa da bugün Spark yalnızca MapReduce alternatifi değildir. Spark SQL, DataFrame API, Structured Streaming, MLlib ve GraphX gibi bileşenleriyle veri mühendisliği, veri bilimi, makine öğrenimi ve analitik iş yüklerini aynı platformda birleştirir.

Spark’ın temel gücü, büyük veriyi küçük parçalara bölüp çok sayıda makinede paralel işleyebilmesidir. Driver, executor, cluster manager, task, stage, DAG, partition, shuffle ve cache gibi kavramlar bu dağıtık işleme mantığının yapı taşlarıdır. Bu kavramları anlamadan Spark’ı yalnızca bir Python veya SQL kütüphanesi gibi kullanmak çoğu zaman performans ve maliyet sorunlarına yol açar.

Spark doğru kullanıldığında büyük veri boru hatlarını hızlandırabilir, data lake ve lakehouse mimarilerini güçlendirebilir, streaming veri akışlarını işleyebilir ve makine öğrenimi için büyük veri hazırlığını ölçeklendirebilir. Ancak Spark her problem için doğru araç değildir. Veri küçükse, işlem basitse veya tek makine yeterliyse Spark gereksiz karmaşıklık yaratabilir.

Sonuç olarak Apache Spark, büyük veri çağının temel altyapı araçlarından biridir. Onu doğru anlamak, yalnızca bir teknolojiyi öğrenmek değil; verinin nasıl dağıtıldığını, nasıl paralel işlendiğini, nasıl optimize edildiğini ve modern veri platformlarının nasıl çalıştığını anlamaktır.

 

Kaynakça

  • Apache Spark. (n.d.). Apache Spark: Unified engine for large-scale data analytics. Apache Software Foundation. https://spark.apache.org/
  • Apache Spark. (n.d.). Overview: Spark documentation. Apache Software Foundation. https://spark.apache.org/docs/latest/
  • Apache Spark. (n.d.). Apache Spark history. Apache Software Foundation. https://spark.apache.org/history.html
  • Apache Spark. (n.d.). Spark SQL and DataFrames. Apache Software Foundation. https://spark.apache.org/sql/
  • Apache Spark. (n.d.). Spark Structured Streaming. Apache Software Foundation. https://spark.apache.org/streaming/
  • Apache Spark. (n.d.). MLlib: Apache Spark’s scalable machine learning library. Apache Software Foundation. https://spark.apache.org/mllib/
  • Apache Spark. (n.d.). GraphX: Apache Spark’s API for graphs and graph-parallel computation. Apache Software Foundation. https://spark.apache.org/graphx/
  • Apache Spark. (n.d.). PySpark documentation. Apache Software Foundation. https://spark.apache.org/docs/latest/api/python/index.html
  • Armbrust, M., Xin, R. S., Lian, C., Huai, Y., Liu, D., Bradley, J. K., Meng, X., Kaftan, T., Franklin, M. J., Ghodsi, A., & Zaharia, M. (2015). Spark SQL: Relational data processing in Spark. Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data, 1383-1394. https://doi.org/10.1145/2723372.2742797
  • Chambers, B., & Zaharia, M. (2018). Spark: The definitive guide: Big data processing made simple. O’Reilly Media.
  • Karau, H., Konwinski, A., Wendell, P., & Zaharia, M. (2015). Learning Spark: Lightning-fast big data analysis. O’Reilly Media.
  • Zaharia, M., Chowdhury, M., Das, T., Dave, A., Ma, J., McCauley, M., Franklin, M. J., Shenker, S., & Stoica, I. (2012). Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing. Proceedings of the 9th USENIX Symposium on Networked Systems Design and Implementation. https://www.usenix.org/conference/nsdi12/technical-sessions/presentation/zaharia
  • Zaharia, M., Xin, R. S., Wendell, P., Das, T., Armbrust, M., Dave, A., Meng, X., Rosen, J., Venkataraman, S., Franklin, M. J., Ghodsi, A., Gonzalez, J., Shenker, S., & Stoica, I. (2016). Apache Spark: A unified engine for big data processing. Communications of the ACM, 59(11), 56-65. https://doi.org/10.1145/2934664

İlave Okuma Önerileri

  • Apache Spark – Official Documentation
  • Apache Spark – Spark SQL And DataFrames Guide
  • Apache Spark – Structured Streaming Programming Guide
  • Apache Spark – MLlib Guide
  • Apache Spark – Cluster Mode Overview
  • Matei Zaharia ve diğerleri – Resilient Distributed Datasets: A Fault-Tolerant Abstraction For In-Memory Cluster Computing
  • Michael Armbrust ve diğerleri – Spark SQL: Relational Data Processing In Spark
  • Matei Zaharia ve diğerleri – Apache Spark: A Unified Engine For Big Data Processing
  • Bill Chambers ve Matei Zaharia – Spark: The Definitive Guide
  • Holden Karau, Andy Konwinski, Patrick Wendell ve Matei Zaharia – Learning Spark

 

🗓️ Yayınlanma Tarihi: 19 Ağustos 2026
🔄 Son Güncelleme Tarihi: 19 Ağustos 2026
🎯 Kimler için: Bu yazı; büyük veri kavramını öğrenmek isteyen genel okurlar, veri mühendisleri, veri analistleri, veri bilimi öğrencileri, yazılım geliştiriciler, iş zekası uzmanları, yapay zeka projelerinde veri hazırlama süreçlerini anlamak isteyen profesyoneller, data lake ve lakehouse mimarileriyle ilgilenen ekipler ve Apache Spark’ın modern veri ekosistemindeki yerini kapsamlı biçimde öğrenmek isteyen herkes için hazırlanmıştır.

İçerik Bilgisi
Bu içerik yaklaşık 6757 kelimeden ve 41601 karakterden oluşmaktadır. Ortalama okuma süresi: 23 dakikadır. Invictus Wiki editoryal ilkelerine uygun olarak hazırlanmış; güvenilir ve doğrulanabilir kaynaklar temel alınarak yayımlanmıştır. Bilgi güncelliği düzenli olarak gözden geçirilir.
Bu Yazıyı Paylaşmak İster Misin?