Apache Spark, büyük veri kümelerini birden fazla makine üzerinde paralel ve dağıtık biçimde işlemek için kullanılan açık kaynaklı bir analitik motorudur. Toplu veri işleme, SQL analitiği, ETL/ELT, veri akışı işleme ve makine öğrenmesi gibi farklı iş yüklerini ortak bir altyapıda çalıştırabilir.
Spark; veri mühendislerinin yüksek hacimli verileri dönüştürmesine, veri bilimcilerin büyük veri üzerinde analiz ve modelleme yapmasına, kurumların ise ölçeklenebilir veri işlem hatları kurmasına yardımcı olur. Ancak Spark bir veritabanı veya kalıcı depolama sistemi değildir; HDFS, nesne depolama servisleri, veri gölleri, ilişkisel veritabanları ve mesajlaşma platformları gibi veri kaynaklarıyla birlikte çalışan bir hesaplama motorudur.
- Apache Spark Nedir?
- Apache Spark Ne İşe Yarar?
- Apache Spark Nasıl Çalışır?
- RDD, DataFrame ve Dataset Nedir?
- Apache Spark’ın Temel Bileşenleri
- Apache Spark Hangi Programlama Dillerini Destekler?
- Apache Spark Hangi Alanlarda Kullanılır?
- Apache Spark’ın Sektörel Kullanım Örnekleri
- Apache Spark ve Hadoop Arasındaki Farklar
- Apache Spark ile Apache Kafka Arasındaki Fark Nedir?
- Apache Spark’ın Avantajları
- Apache Spark’ın Sınırlamaları
- Apache Spark Ne Zaman Kullanılmalı?
- Apache Spark Kimler İçin Önemlidir?
- Apache Spark Nasıl Öğrenilir?
- Sonuç
Apache Spark Nedir?
Apache Spark; yapılandırılmış, yarı yapılandırılmış ve yapılandırılmamış veriler üzerinde dağıtık hesaplama yapılmasını sağlayan bir büyük veri işleme platformudur. Verileri ve işlemleri bir kümedeki farklı sunuculara dağıtarak tek bir makinenin işlemci ve bellek sınırlarını aşan iş yüklerinin yönetilmesini sağlar.
Spark’ın sıkça “bellek içi çalışan sistem” olarak tanımlanması, bütün verilerin daima RAM’de tutulduğu anlamına gelmez. Spark; ihtiyaç duyulduğunda ara sonuçları bellekte önbelleğe alabilir, ancak iş planına, veri büyüklüğüne ve kaynaklara bağlı olarak diskten de yararlanır. Bu nedenle gerçek performans; veri bölümlendirme, sorgu planı, veri aktarımı, küme kaynakları ve kullanılan depolama sistemi gibi birçok etkene bağlıdır.
Apache Spark Ne İşe Yarar?
Apache Spark’ın temel görevi, büyük ölçekli veriler üzerinde dönüşüm ve analiz işlemlerini dağıtık biçimde yürütmektir. Başlıca kullanım amaçları şunlardır:
- Büyük veri kümelerini temizlemek, birleştirmek ve dönüştürmek
- ETL ve ELT veri işlem hatları oluşturmak
- Spark SQL ile yapılandırılmış verileri sorgulamak
- Sürekli gelen olay ve sensör verilerini işlemek
- Büyük veri üzerinde makine öğrenmesi işlem hatları kurmak
- Uygulama, güvenlik ve sistem loglarını analiz etmek
- Veri gölü ve lakehouse ortamlarındaki verileri işlemek
- Graf yapıları üzerinde dağıtık analizler gerçekleştirmek
Bu yetenekler Spark’ı tek bir sektörle sınırlı olmayan genel amaçlı bir veri işleme motoru hâline getirir.
Apache Spark Nasıl Çalışır?
Spark uygulamasında kullanıcı tarafından tanımlanan işlemler bir yürütme planına dönüştürülür. Büyük veri kümesi bölümlere ayrılır ve görevler kümedeki executor süreçlerinde paralel olarak çalıştırılır. Genel işleyiş şu bileşenlere dayanır:
Driver
Driver, Spark uygulamasının koordinasyon merkezidir. Kullanıcı kodunu çalıştırır, Spark oturumunu oluşturur, işlemleri planlar ve görevlerin executor’lara dağıtılmasını yönetir. Sonuçların ve uygulama durumunun koordinasyonu da driver üzerinden yürütülür.
Executor
Executor’lar, uygulamaya ayrılan kaynaklar üzerinde görevleri çalıştıran süreçlerdir. Veri bölümlerini işler, gerektiğinde veriyi bellekte veya diskte saklar ve elde edilen sonuçları driver’a bildirir.
Cluster Manager
Cluster manager, kümedeki CPU ve bellek kaynaklarının uygulamalara tahsis edilmesini sağlar. Spark; kendi Standalone yöneticisiyle, Hadoop YARN üzerinde veya Kubernetes ortamında çalıştırılabilir. Kullanılacak yöntem kurumun mevcut altyapısına, operasyon modeline ve dağıtım ihtiyaçlarına göre belirlenir.
Job, Stage ve Task
Bir action çalıştırıldığında Spark bir job oluşturur. Job, veri bağımlılıklarına ve shuffle sınırlarına göre stage’lere; her stage ise veri bölümleri üzerinde çalışacak task’lara ayrılır. Task’ların farklı executor’larda paralel yürütülmesi, Spark’ın ölçeklenebilir işlem kapasitesinin temelini oluşturur.
RDD, DataFrame ve Dataset Nedir?
RDD
RDD (Resilient Distributed Dataset), Spark’ın düşük seviyeli dağıtık veri yapılarından biridir. Veriyi bölümlere ayırır ve dönüşümlerin soy bilgisini koruyarak bazı hata durumlarında kaybolan bölümlerin yeniden hesaplanmasını sağlar. Ayrıntılı kontrol gerektiren özel işlemlerde kullanılabilse de modern analitik uygulamalarda çoğunlukla daha yüksek seviyeli API’ler tercih edilir.
DataFrame
DataFrame, adlandırılmış sütunlara ve tanımlı bir şemaya sahip dağıtık veri yapısıdır. Spark SQL optimizasyonlarından yararlandığı için veri hazırlama, analitik sorgular ve ETL işlerinde yaygın olarak kullanılır. Python kullanan ekiplerin PySpark ile en sık çalıştığı yapılardan biridir.
Dataset
Dataset, DataFrame’in sağladığı optimize yürütme avantajlarını güçlü tip desteğiyle birleştirir. Özellikle Scala ve Java API’lerinde kullanılır. Python API’sinde Scala ve Java’daki anlamıyla tip güvenli Dataset API’si bulunmadığından PySpark projeleri ağırlıklı olarak DataFrame kullanır.
Apache Spark’ın Temel Bileşenleri
Spark Core
Spark Core; görev zamanlama, bellek yönetimi, hata toleransı ve dağıtık yürütme gibi temel yetenekleri sağlar. Spark SQL, Structured Streaming ve MLlib gibi üst düzey bileşenler bu çekirdek altyapıdan yararlanır.
Spark SQL
Spark SQL; SQL sorguları, DataFrame ve Dataset API’leriyle yapılandırılmış verilerin işlenmesini sağlar. CSV, JSON, Parquet, ORC, veri tabanları ve çeşitli veri gölü formatlarıyla çalışabilir. Sorguların analiz edilmesi ve optimize edilmesi, manuel düşük seviyeli işlemlere kıyasla daha verimli yürütme planları oluşturulmasına yardımcı olur.
Structured Streaming
Structured Streaming, Spark SQL motoru üzerine kurulan ölçeklenebilir ve hata toleranslı veri akışı işleme altyapısıdır. Geliştiriciler akış verisini statik bir DataFrame’e benzer API ile tanımlar; Spark sorguyu yeni veriler geldikçe artımlı olarak çalıştırır.
Eski DStream tabanlı Spark Streaming API’si dokümantasyonda eski API olarak yer almaktadır. Yeni projelerde akış işleme gereksinimleri değerlendirilirken öncelikle Structured Streaming’in incelenmesi daha doğru olur.
MLlib
MLlib, Spark’ın ölçeklenebilir makine öğrenmesi kütüphanesidir. Sınıflandırma, regresyon, kümeleme, özellik dönüştürme, model değerlendirme ve hiperparametre ayarlama gibi işlemler için araçlar sunar. Spark’ın her makine öğrenmesi problemi için en iyi çözüm olduğu varsayılmamalı; veri hacmi, algoritma desteği ve dağıtık çalışmanın maliyeti birlikte değerlendirilmelidir.
GraphX
GraphX, Spark’ın grafikler ve grafik-paralel hesaplamalar için sunduğu Scala API’sidir. PageRank, bağlı bileşenler ve üçgen sayımı gibi graf algoritmalarında kullanılabilir. Proje dili ve kullanım senaryosu seçilirken GraphX’in API kapsamı ile alternatif graf teknolojileri karşılaştırılmalıdır.
Apache Spark Hangi Programlama Dillerini Destekler?
Spark ekosisteminde en yaygın kullanılan diller Python, Scala ve Java’dır:
- Python/PySpark: Veri mühendisliği, veri analizi ve veri bilimi ekipleri için erişilebilir bir API sunar.
- Scala: Spark’ın JVM tabanlı ekosistemiyle yakın çalışır ve güçlü tip özelliklerinden yararlanır.
- Java: Java tabanlı kurumsal sistemlerle entegrasyon gereken projelerde kullanılabilir.
- SQL: Spark SQL üzerinden veri sorgulama ve dönüşüm işlemlerinde kullanılır.
SparkR mevcut olmakla birlikte güncel Apache Spark dokümantasyonunda kullanımdan kaldırılmış olarak işaretlenmiştir. Bu nedenle yeni bir proje için teknoloji seçerken uzun vadeli destek durumu ayrıca incelenmelidir.
Scala’nın Spark ekosistemindeki yerini daha ayrıntılı incelemek için Scala programlama dilinin avantajları ve kullanım alanları rehberine göz atabilirsiniz.
Apache Spark Hangi Alanlarda Kullanılır?
1. ETL ve ELT Süreçleri
Spark; farklı kaynaklardan gelen verilerin okunması, temizlenmesi, standardize edilmesi, zenginleştirilmesi ve hedef veri ambarı ya da veri gölüne yazılması için kullanılır. Yüksek hacimli günlük işler ile artımlı veri yükleme süreçleri dağıtık olarak yürütülebilir.
2. Büyük Veri Analizi
Milyonlarca veya milyarlarca kayıttan oluşan veri kümeleri üzerinde gruplama, birleştirme, filtreleme ve toplulaştırma işlemleri gerçekleştirilebilir. Spark SQL, analistlerin ve veri mühendislerinin SQL bilgilerini dağıtık veri üzerinde kullanmasına imkân verir.
3. Veri Akışı ve Olay İşleme
Uygulama olayları, tıklama akışları, işlem kayıtları, IoT sensörleri veya loglar gibi sürekli üretilen veriler Structured Streaming ile işlenebilir. Spark, çoğu senaryoda veriyi üreten sistem değildir; Apache Kafka gibi platformlardan veriyi okuyarak dönüştürür ve başka sistemlere aktarır.
İki teknolojinin görevlerini ayırmak için Apache Kafka ve Apache Spark arasındaki farklar içeriğini inceleyebilirsiniz.
4. Makine Öğrenmesi
Büyük veri kümelerinde özellik hazırlama, makine öğrenmesi pipeline’ları kurma, model değerlendirme ve bazı algoritmaları dağıtık biçimde çalıştırma amacıyla MLlib kullanılabilir. Bu özellik; dolandırıcılık sinyalleri, müşteri segmentasyonu, tahminleme ve öneri sistemleri gibi senaryolarda değerlendirilebilir.
5. Log ve Güvenlik Analizi
Sunucu, uygulama, ağ ve güvenlik sistemlerinden gelen yüksek hacimli loglar bir araya getirilerek hata örüntüleri, performans sorunları ve anormal davranışlar araştırılabilir. Üretim ortamında gecikme, saklama ve olay müdahale gereksinimleri ayrıca tasarlanmalıdır.
6. Veri Gölü ve Lakehouse İş Yükleri
Spark, nesne depolama veya dağıtık dosya sistemi üzerindeki büyük veri kümelerini okuyup dönüştürmek için yaygın olarak kullanılır. Şema yönetimi, tablo formatı, veri kalitesi, bölümleme ve küçük dosya problemi gibi konular doğru yönetildiğinde kurumsal veri platformlarının önemli bir işlem katmanını oluşturabilir.
7. Graf Analitiği
Kullanıcılar, cihazlar, işlemler veya ağ düğümleri arasındaki ilişkilerin analiz edilmesi gereken senaryolarda graf tabanlı hesaplamalar yapılabilir. Sosyal ağ analizi, bağlantılı bileşenlerin bulunması ve ilişki örüntülerinin araştırılması bu gruba girer.
Apache Spark’ın Sektörel Kullanım Örnekleri
| Sektör | Örnek kullanım |
|---|---|
| Finans ve bankacılık | İşlem analizi, risk göstergeleri, dolandırıcılık sinyalleri ve müşteri segmentasyonu |
| E-ticaret | Tıklama akışı analizi, ürün önerileri, talep ve stok analizi |
| Telekomünikasyon | Ağ kayıtlarının işlenmesi, servis kalitesi analizi ve müşteri davranışları |
| Üretim ve IoT | Sensör verisi işleme, anomali araştırması ve kestirimci bakım hazırlıkları |
| Sağlık | Yetkilendirilmiş klinik ve operasyonel veri analizi; veri güvenliği ve mevzuat kontrolleriyle birlikte |
| Medya | İçerik tüketim analizi, öneri sistemleri ve reklam verisi işleme |
| Siber güvenlik | Yüksek hacimli olay ve log verilerinin birleştirilmesi ve analiz edilmesi |
Apache Spark ve Hadoop Arasındaki Farklar
Spark ile Hadoop’u doğrudan birbirinin alternatifi gibi ele almak eksik bir karşılaştırmadır. Hadoop birden fazla bileşenden oluşan ekosistemdir; HDFS depolama, YARN kaynak yönetimi, MapReduce ise veri işleme görevleri üstlenir. Spark ise esas olarak hesaplama ve analitik motorudur.
| Kriter | Apache Spark | Hadoop MapReduce |
|---|---|---|
| Temel rol | Genel amaçlı dağıtık analitik ve veri işleme | Disk merkezli toplu veri işleme modeli |
| İş yükleri | Batch, SQL, streaming ve makine öğrenmesi | Ağırlıklı olarak batch |
| Ara sonuçlar | Bellek ve disk birlikte kullanılabilir | Aşamalar arasında disk kullanımı daha belirgindir |
| API | Python, Scala, Java ve SQL | Daha düşük seviyeli MapReduce yaklaşımı |
| Birlikte çalışma | HDFS üzerinde veri okuyabilir ve YARN üzerinde çalışabilir | Spark için depolama ve kaynak altyapısı sağlayabilir |
Dolayısıyla kurumlar HDFS ve YARN altyapısını koruyup işleme motoru olarak Spark kullanabilir. Konuyu mimari açıdan derinleştirmek için büyük veride Hadoop ve Spark rehberine geçebilirsiniz.
Apache Spark ile Apache Kafka Arasındaki Fark Nedir?
Apache Kafka, olayların yayınlanması, saklanması ve tüketicilere aktarılması için kullanılan dağıtık bir event streaming platformudur. Apache Spark ise bu olayları veya farklı kaynaklardaki verileri işleyen bir hesaplama motorudur.
Örnek bir mimaride uygulamalar olayları Kafka’ya gönderir; Spark Structured Streaming Kafka’daki olayları okur, dönüştürür ve analiz sonucunu veri tabanına, veri gölüne ya da başka bir topic’e yazabilir. Bu nedenle Kafka ve Spark çoğu projede rakip değil, birbirini tamamlayan teknolojilerdir.
Apache Spark’ın Avantajları
- Yüksek hacimli veriyi dağıtık ve paralel işleyebilmesi
- Batch, SQL, streaming ve makine öğrenmesi iş yüklerini ortak ekosistemde sunması
- Python, Scala, Java ve SQL desteği
- HDFS, nesne depolama, Kafka ve farklı veri kaynaklarıyla entegrasyon
- DataFrame ve Spark SQL üzerinden optimize yürütme planları
- Yerel ortamdan büyük kümelere kadar farklı ölçeklerde çalışabilmesi
- YARN ve Kubernetes gibi kurumsal altyapılara dağıtılabilmesi
Apache Spark’ın Sınırlamaları
- Küme boyutlandırma ve performans ayarları uzmanlık gerektirebilir.
- Yanlış bölümleme ve yoğun shuffle işlemleri performansı düşürebilir.
- Bellek, ağ ve depolama maliyetleri veri büyüdükçe artabilir.
- Küçük veri kümelerinde dağıtık sistem ek yükü, sağladığı faydadan büyük olabilir.
- Düşük gecikme beklentisi çok yüksek olan her olay işleme senaryosu için uygun olmayabilir.
- Spark kalıcı depolama, mesaj taşıma veya veri yönetişimi ihtiyaçlarını tek başına çözmez.
Apache Spark Ne Zaman Kullanılmalı?
Aşağıdaki koşullardan biri veya birkaçı varsa Spark değerlendirilebilir:
- Veri tek bir makinenin kapasitesini aşıyorsa
- Yüksek hacimli ETL ve analitik işlemler paralelleştirilmek isteniyorsa
- Batch ve veri akışı iş yüklerinin ortak API’lerle yönetilmesi gerekiyorsa
- Kurumda HDFS, YARN, Kubernetes, veri gölü veya lakehouse altyapısı bulunuyorsa
- Python, Scala, Java veya SQL kullanan veri ekipleri ortak bir işlem motorunda buluşacaksa
Veri hacmi küçükse, işlem basitse veya geleneksel bir veri tabanı gereksinimi karşılayabiliyorsa Spark gereksiz operasyonel karmaşıklık yaratabilir. Teknoloji seçimi yalnızca veri büyüklüğüne değil; gecikme, maliyet, ekip yetkinliği, bakım ve güvenlik gereksinimlerine göre yapılmalıdır.
Apache Spark Kimler İçin Önemlidir?
- Veri mühendisleri: Dağıtık ETL/ELT ve veri pipeline’ları geliştirmek için
- Veri bilimciler: Büyük ölçekli veri hazırlama ve MLlib tabanlı çalışmalar için
- Yazılım geliştiriciler: Veri yoğun uygulama ve servislerle entegrasyon kurmak için
- Veri mimarları: Veri gölü, lakehouse ve akış mimarilerini tasarlamak için
- Platform ekipleri: Spark iş yüklerini Kubernetes, YARN veya bulut ortamlarında işletmek için
- Teknik yöneticiler: Büyük veri yatırımlarını doğru kullanım senaryolarıyla eşleştirmek için
Apache Spark Nasıl Öğrenilir?
Apache Spark öğrenmek isteyenlerin temel SQL bilgisine ve en az bir programlama diline hâkim olması yararlıdır. PySpark için Python; tip güvenli JVM tabanlı geliştirme için Scala veya Java tercih edilebilir. Ardından şu sıra izlenebilir:
- Dağıtık sistem ve büyük veri temelleri
- Spark mimarisi: driver, executor, job, stage ve task
- DataFrame ve Spark SQL
- Veri okuma, yazma, bölümleme ve dosya formatları
- Join, aggregation ve shuffle optimizasyonu
- Structured Streaming
- Hata toleransı, izleme ve performans ayarları
- Küme üzerinde paketleme ve dağıtım
Uygulamalı bir program arayan kurumlar BlueMark Academy’nin Apache Spark Eğitimi sayfasını inceleyebilir. Eğitim; Spark uygulamalarının küme üzerinde geliştirilmesi, Spark SQL, veri akışı, ETL ve Hadoop ekosistemiyle çalışma gibi konulara odaklanır. Daha geniş bir öğrenme planı için Big Data eğitimleri arasından kuruma uygun programlar değerlendirilebilir.
Sonuç
Apache Spark; büyük veri analizi, ETL/ELT, SQL sorguları, veri akışı işleme ve makine öğrenmesi gibi iş yüklerini dağıtık biçimde çalıştıran güçlü bir analitik motordur. Spark’ın gerçek değeri yalnızca hız iddiasından değil; farklı veri kaynaklarını ve iş yüklerini ortak, ölçeklenebilir bir işlem katmanında bir araya getirebilmesinden gelir.
Bununla birlikte doğru sonuç için veri bölümleme, kaynak yönetimi, sorgu optimizasyonu, güvenlik ve izleme konularının birlikte ele alınması gerekir. Kurumsal veri ekibinizin mevcut altyapısına göre uygulamalı bir eğitim planı oluşturmak için BlueMark Academy’nin Apache Spark ve büyük veri programlarını inceleyebilirsiniz.
Apache Spark nedir?
Apache Spark, büyük veri kümelerini birden fazla makine üzerinde paralel ve dağıtık biçimde işlemek için kullanılan açık kaynaklı bir analitik motordur.
Apache Spark ne işe yarar?
Apache Spark; toplu veri işleme, ETL ve ELT, SQL analitiği, veri akışı işleme, log analizi ve büyük ölçekli makine öğrenmesi iş akışlarında kullanılır.
Apache Spark bir veritabanı mıdır?
Hayır. Spark bir hesaplama ve analitik motorudur. Kalıcı depolama için HDFS, nesne depolama, veri gölü, veri ambarı veya veritabanı gibi sistemlerle birlikte çalışır.
Apache Spark hangi programlama dillerini destekler?
Spark ekosisteminde Python (PySpark), Scala, Java ve SQL yaygın olarak kullanılır. Dil seçimi ekip yetkinliğine ve kullanım senaryosuna göre yapılmalıdır.
Apache Spark ile Hadoop arasındaki fark nedir?
Hadoop depolama, kaynak yönetimi ve MapReduce gibi bileşenlerden oluşan bir ekosistemdir. Spark ise dağıtık veri işleme motorudur ve HDFS üzerinde veri okuyup YARN üzerinde çalışabilir.
Apache Spark ile Apache Kafka arasındaki fark nedir?
Kafka olayların taşınması ve saklanmasına odaklanan bir event streaming platformudur. Spark ise bu olayları ve diğer verileri işleyen analitik motordur; iki teknoloji birlikte kullanılabilir.
PySpark nedir?
PySpark, Apache Spark’ın Python API’sidir. Python kullanıcılarının DataFrame, Spark SQL, Structured Streaming ve diğer Spark özellikleriyle dağıtık veri işlemesini sağlar.
Apache Spark’ı kimler öğrenmeli?
Yüksek hacimli verilerle çalışan veri mühendisleri, veri bilimciler, yazılım geliştiriciler, veri mimarları ve platform ekipleri Apache Spark öğrenebilir.
