Vebende Akademi - apache-spark-cluster-kurulumu
Uzmanla Konuşun
Blog
MAKALE

Apache Spark Cluster Kurulumu — Adım Adım Üretim Hazır Rehber

Yayınlayan: Vebende Akademi  |  Okuma süresi: ~60–120 dk

Apache Spark Cluster Kurulumu — Adım Adım Üretim Hazır Rehber

Yayınlayan: Vebende Akademi  |  Okuma süresi: ~60–120 dk

1. GİRİŞ

Apache Spark, büyük veri işleme ve analitiğinde yüksek performanslı, dağıtık hesaplama sağlamak için yaygın olarak kullanılan bir motorudur. MapReduce dönemi sonrası veri işleme paradigması olarak öne çıkan Spark; bellek içi işlem desteği, zengin API seti (DataFrame, Dataset, RDD), SQL entegrasyonu ve makine öğrenmesi kitaplıkları ile hem ETL hem gerçek zamanlı akış işleme senaryolarında tercih edilmektedir. Bu rehber, bir Spark cluster'ının üretime hazır şekilde nasıl kurulacağını, mimari kararları, konfigürasyon parametrelerini ve operasyonel en iyi uygulamaları adım adım açıklar.

Neden bugün önemli?

Verinin hacmi, çeşitliliği ve işleme ihtiyaçları arttıkça, düşük gecikmeli toplu ve akış işleme yeteneği kritik hale geliyor. Spark, düşük-latency bellek içi hesaplama, güçlü toplu işleme ve stream processing (Structured Streaming) özellikleriyle modern veri platformlarının çekirdeğinde yer alır. Bulut geçişleri, veri göçleri ve AI/ML iş akışlarının artmasıyla Spark cluster'larının doğru kurulumu hem performans hem maliyet hem de güvenilirlik açısından belirleyicidir.

Kimler için önemli?

  • Veri mühendisleri ve platform mühendisleri
  • Big data mimarları
  • ML mühendisleri (ön işleme ve batch feature engineering)
  • Veri analistleri ve operasyon ekipleri

Hangi problemleri çözüyor?

  • Büyük veri setlerinin paralel işlenmesi ve ETL süreçlerinin hızlandırılması
  • Gerçek zamanlı veya near‑real‑time iş akışlarının yönetimi (Structured Streaming)
  • Tekrarlanabilir, ölçeklenebilir ML feature engineering ve model eğitim veri hazırlığı

2. KAVRAMSAL TEMELLER

Apache Spark nedir?

Apache Spark, dağıtık veri işleme için tasarlanmış bir çerçevedir. Hızlı bellek içi hesaplama için tasarlanmış olmasına rağmen disk tabanlı işlemleri de verimli şekilde yönetir. Spark, çekirdek motor (Spark Core) ve üstünde çalışan modüller (Spark SQL, Spark Streaming, MLlib, GraphX) ile zengin bir ekosistem sunar.

Temel kavramlar ve terminoloji

  • Driver: Spark uygulamasını yöneten süreç; job scheduling, task planlama, DAGScheduler sorumlulukları burada toplanır.
  • Executor: Worker node üzerinde çalışan süreçler; taskları yürütür ve bellek/disk üzerinde veri tutar.
  • Cluster Manager: Kaynak yönetimini yapan bileşen (YARN, Mesos, Kubernetes veya Spark Standalone).
  • Master / Worker: Standalone modunda master control node, worker ise executorlara ev sahipliği yapar.
  • Partition: Verinin paralel işlenmesini sağlayan temel birim; partition sayısı paralellik ve performansı doğrudan etkiler.
  • Shuffle: Yeniden düzenleme (repartition, reduceByKey) sırasında node'lar arası veri hareketi; en maliyetli operasyonlardandır.

Mimari seçenekler

Spark cluster'ı, kullanılacak cluster manager ve deployment modeli bazında farklı şekillerde kurulabilir: on‑premise bare‑metal, VM tabanlı, bulut VM (IaaS), container üzerinde Kubernetes orchestration veya managed hizmetler (Dataproc, EMR, Azure HDInsight/Synapse Spark). Seçim iş yükü, operasyon yetkinliği ve maliyet kriterlerine göre yapılmalıdır.

3. NASIL ÇALIŞIR?

Sistem mimarisi (yüksek seviye)

Tipik bir Spark mimarisi şu bileşenlerden oluşur: Cluster Manager (yönetici), Driver (uygulama koordinatörü), Executor'lar (worker node üzerinde çalışan işleyiciler), HDFS/S3/ADLS gibi dağıtık depolama ve gerektiğinde Kafka/Flume gibi ingesterlar. Driver, job'u alır, DAG oluşturur ve task'ları executor'lara atar. Executor'lar veriyi işler, shuffle ve write işlemlerini gerçekleştirir.

Bileşenler

  • Cluster Manager: Kaynak talep ve dağıtımını yapar. YARN için ResourceManager, Kubernetes için K8s API server ile entegre çalışır.
  • Driver: Uygulama yaşam döngüsünü yöneten süreç; failover ve yüksek erişilebilirlik tasarımları burada kritik rol oynar.
  • Executors: İşlem ve veri depolama (shuffle disk) kaynaklarını kullanır; executor başına bellek ve CPU doğru boyutlandırılmalıdır.
  • External Storage: Kalıcı veri katmanı (S3, HDFS, ADLS) — input/output için yüksek throughput gereksinimleri göz önünde bulundurulur.

Veri akışı ve çalışma mantığı

Spark DataFrame API kullanıldığında içsel olarak logical plan -> physical plan -> task stage'leri üretir. Transformasyonlar lazy değerlendirilir; action çağrıldığında job tetiklenir. Shuffle heavy işlemler (groupBy, join) network IO ve disk IO kullandığından bunları optimize etmek performans için esastır.

Deployment modelleri

  1. Standalone: Basit yönetim, küçük ve orta ölçekli kullanımlar için uygundur.
  2. YARN: Hadoop ekosistemi ile entegrasyon, büyük kurumsal altyapılar için yaygın.
  3. Kubernetes: Container tabanlı modern deployment; microservices ve CI/CD ile uyumlu.
  4. Managed hizmetler: GCP Dataproc, AWS EMR, Azure Synapse — operasyon maliyetini düşürür, ancak vendor lock‑in riski vardır.

4. GERÇEK DÜNYA KULLANIMLARI

Apache Spark geniş bir kullanım yelpazesine sahiptir; burada sektör liderleri ve kullanım örnekleri üzerinden somut senaryoları inceleyelim.

Netflix

İçerik öneri sistemleri, batch feature engineering ve ETL işlemleri için Spark kullanılır. Netflix, kullanıcılara ölçekli veri işleme yaparken düşük gecikme ve güvenilir transformasyonlar sağlar.

Uber

Gerçek zamanlı telemetri ve batch raporlama için Spark tabanlı pipeline'lardan yararlanır. Uber gibi şirketler, hem streaming hem batch iş akışlarını birleştirerek analitik ve ML veri hazırlığı yapar.

Amazon

AWS üzerinde müşteriler Spark (EMR) kullanarak büyük veri işleme ve ML hazırlığı yapar; Amazon'un kendi iç ekosistemindeki bazı iş akışları da Spark üzerine kuruludur.

OpenAI ve ML odaklı uygulamalar

Eğitim verisi hazırlığı, feature store beslemeleri ve büyük boyutlu veri temizleme işlemleri için Spark sıklıkla kullanılır. Model eğitimine giden pipeline'ların ön işleme aşamasında Spark yaygındır.

Stripe

Finansal işleme, olası sahtekârlık tespitleri ve büyük veri analitikleri için Spark tabanlı toplu işleme sistemleri kurar.

5. AVANTAJLAR VE SINIRLAMALAR

Avantajlar

  • Performans: Bellek içi işlem ve optimized DAG execution sayesinde MapReduce'a göre çok daha düşük gecikme.
  • Ölçeklenebilirlik: Yatay olarak daha büyük kümelere ölçeklenebilir; executor sayısı ve kaynaklarıyla doğrusal olmayan ama etkili ölçeklenme sağlar.
  • Geliştirici deneyimi: DataFrame/Dataset API'leri, SQL desteği ve zengin kütüphaneler (MLlib, GraphX) gelişmiş üretkenlik sunar.

Dezavantajlar

  • Karmaşıklık: Shuffle optimizasyonu, partitioning stratejileri ve kaynak boyutlandırma zorlayıcıdır.
  • Maliyet: Hafıza yoğun konfigürasyonlar ve I/O, yanlış ayarlar maliyeti ciddi şekilde artırabilir.
  • Operasyon zorlukları: Job failure troubleshooting, skew handling ve long‑running streaming job yönetimi uzmanlık gerektirir.

6. ALTERNATİFLER VE KARŞILAŞTIRMA

Aşağıdaki tablo Spark'ı popüler alternatifleriyle karşılaştırır.

TeknolojiAvantajDezavantaj
Apache SparkGeniş ekosistem, düşük‑latency bellek içi hesaplamaOperasyonel karmaşıklık, bellek maliyeti
FlinkGerçek zamanlı stream processing'te güçlü, event time semanticsBatch kullanımında Spark kadar yaygın değil
Beam (Dataflow)Unified model (batch+stream), portable runnersEk uygulama karmaşıklığı, runner bağımlılığı
Presto/TrinoAd‑hoc SQL sorguları için hızlı, interaktif analizETL ve kompleks transformasyonlarda Spark kadar güçlü değil

7. EN İYİ PRATİKLER

Production kullanımı

  • Cluster izolasyonu: farklı iş yükleri için kaynak kuyrukları veya namespace'ler belirleyin (ör: prod/etl/adhoc).
  • Driver recovery ve high availability: kritik uygulamalar için driver failover stratejileri uygulayın.
  • Versioning: Spark uygulama kodu, dependency'ler ve config için version control uygulatın; geri dönüş planı hazırlayın.

Performans optimizasyonu

  • Partition boyutunu iş yüküne göre ayarlayın (ideal partition ~100–200MB/HDFS block hedefi olarak).
  • Shuffle'i azaltmak için map‑side reductions, broadcast join (small table) kullanın.
  • Broadcast variables ve caching stratejileri (persist MEMORY_ONLY/ MEMORY_AND_DISK) ile hot data'ları tutun.

Güvenlik

  • Veri erişimi kontrolü: ACL, IAM ya da Ranger/ Sentry entegrasyonları uygulayın.
  • Encryption: in‑transit TLS ve at‑rest encryption (SSE for S3, HDFS encryption zones) kesinlikle gerekli.
  • Audit log: job çalıştırma, veri erişimi ve config değişiklikleri için kapsamlı audit trail saklayın.

Ölçeklenebilirlik

  • Autoscaling: Kubernetes veya cloud managed çözümlerde autoscaler ile kaynakları talebe göre yönetin.
  • Resource quotas: CPU/Memory limitlerini belirleyin ve QoS grada göre işleri planlayın.

8. SIK YAPILAN HATALAR

  • Yanlış partitioning: tek bir partition üzerinde yoğunlaşma (data skew) performansı bozar.
  • Yetersiz shuffle tuning: varsayılan ayarlarla büyük join'ler çalıştırmak sık başarısızlığa yol açar.
  • Executor bellek aşımı: heap ve off‑heap ayarlarını doğru yapmamak out‑of‑memory hatalarına sebep olur.
  • Logging ve monitoring eksikliği: job’ların başarısızlık nedenleri izlenemezse root cause analysis zorlaşır.

9. GELECEK TRENDLER

AI etkisi

Model eğitimi ve feature‑store entegrasyonları Spark ekosistemini daha da önemli hale getiriyor. AutoML ve distributed training pipeline'ları Spark ile entegre edilerek büyük veri hazırlığına yönelik yeni pattern'ler ortaya çıkacak.

Yeni teknolojiler

Apache Iceberg, Delta Lake gibi tablo formatları ile transaction log, time travel ve sinyalizasyon özellikleri Spark uygulamalarının veri katmanını güçlendiriyor. Bu altyapılar, reproducible pipelines ve güvenilir data lakes için kritik olacak.

Sektör dönüşümü

Bulut ve container tabanlı deployment'ların yaygınlaşması ile Spark'ın Kubernetes entegrasyonu önem kazanacak. Ayrıca serverless ve on‑demand Spark çalıştırma modelleri maliyet‑verimlilik açısından öne çıkıyor.

EK BÖLÜMLER

Sık Sorulan Sorular (FAQ)

  1. Apache Spark hangi durumlarda tercih edilmeli?

    Spark, büyük veri setlerinin paralel işlenmesi, ETL, toplu makine öğrenmesi veri hazırlığı ve structured streaming senaryolarında tercih edilmelidir.

  2. Flink ile Spark arasındaki temel fark nedir?

    Flink streaming-first bir mimariye sahipken, Spark batch ve streaming'i unified API ile sunar; gerçek zamanlı event time semantics Flink'te daha olgun olabilir.

  3. Kubernetes üzerinde Spark mı yoksa managed EMR/Dataproc mu tercih etmeli?

    Operasyonel yetkinlik ve vendor lock‑in toleransına göre karar verin: Kubernetes modern CI/CD entegrasyonları sunar; managed servisler operasyonel yükü azaltır.

  4. Partition sayısını nasıl belirlemeliyim?

    Genel kılavuz olarak partition sayısı = 2–4 x total cores önerilir; ayrıca input file boyutu ve hedef partition boyutu (ör. 128–256MB) dikkate alınmalıdır.

  5. Shuffle kaynaklı sorunları nasıl tespit ederim?

    Job UI (Spark UI), stage/task metrics ve executor logs ile skewed partition'lar ve long shuffle spill'leri izlenerek belirlenir.

  6. Memory tuning için hangi parametreler kritiktir?

    spark.executor.memory, spark.driver.memory, spark.memory.fraction, spark.memory.storageFraction ve off‑heap ayarları kritik önemdedir.

  7. Checkpointing ve exactly‑once stream processing nasıl sağlanır?

    Structured Streaming'de checkpoint'ler ve idempotent sinks (ör. transactional writes, idempotent upserts) ile exactly‑once garantileri iyileştirilebilir.

  8. Spark uygulamalarını production'da nasıl izlemeliyim?

    Prometheus + Grafana, Spark metrics, job history server ve log aggregation (ELK/EFK) ile kapsamlı izleme ve alarm kurun.

Anahtar Kavramlar

Driver
Spark uygulamasını koordine eden süreç.
Executor
Taskları çalıştıran worker süreci.
Partition
Verinin paralel işlenmesi için bölümlenmiş bir birim.
Shuffle
Partition'lar arasında veri yeniden dağıtımı; maliyetlidir.
Broadcast Join
Küçük table'ı tüm executor'lara dağıtarak network I/O'yu azaltan join stratejisi.

Öğrenme Yol Haritası

  1. 0–1 Ay: Spark temel kavramlarını öğrenin: RDD, DataFrame, Spark SQL ve Spark UI ile çalışın.
  2. 1–3 Ay: Small scale projeler ve ETL job'ları kurarak partitioning, caching, broadcast join, ve shuffle davranışlarını deneyin.
  3. 3–6 Ay: Cluster deployment modellerini (Standalone, YARN, Kubernetes) deneyin; job tuning ve monitoring öğrenin.
  4. 6–12 Ay: Production iş yüklerini yönetin: HA, autoscaling, cost optimization ve security uygulamalarını hayata geçirin.
  5. 12+ Ay: Iceberg/Delta Lake, veri gölleri, ve ML pipeline entegrasyonları üzerinde uzmanlaşın.