Modül 8 · Toplu İşleme (Batch) · ⏱ 6 dk

Bulutta Spark: Dataproc vs Colab

Spark in cloud

Bu derste neler öğreneceksin

  • Dataproc cluster oluşturur
  • GCS Dataproc BigQuery pipeline kurar
  • Colab ücretsiz tier ile sınır testi yapar

Bulutta Spark: Üç Karar

Spark’ı kendi makinemizde çalıştırmak öğrenme için iyi, ama üretimde üç temel soru var:

  1. Nerede çalışacak? (Colab, kendi VM, Dataproc, EMR, Databricks…)
  2. Veri nerede? (yerel disk, GCS/S3, HDFS)
  3. Sonuç nereye yazılacak? (BigQuery, GCS, dashboard)

Bugün Google Cloud üzerinde iki uç nokta karşılaştıracağız: Colab (geliştirme/deneme) ile Dataproc (üretim). Aradaki farkları, maliyetleri, ne zaman hangisini seçeceğini netleştireceğiz.

Google Colab: Hızlı Geliştirme, Sınırlı Üretim

Colab, tarayıcıda çalışan bir Jupyter defteri ortamı. Google sana ücretsiz (kısıtlı) bir VM tahsis ediyor; sen Python/PySpark kodu yazıyorsun, çıktıyı alıyorsun.

Ücretsiz tier sınırları:

  • GPU: aralıklı kullanım, kuyruk olabilir
  • RAM: ~12 GB
  • Disk: ~78 GB (oturum sonunda uçar)
  • Maks oturum: 12 saat, sonra düşer
  • Yoğun kullanımda Colab seni “Paylaşılan GPU’ya” alabilir (yavaşlar)

Ücretli tier:

  • Colab Pro: ~$10/ay. Daha hızlı GPU, daha uzun oturum.
  • Colab Pro+: ~$50/ay. Öncelikli erişim, arka plan çalıştırma.

Colab’da PySpark başlatmak için:

# 1) Spark indir (JVM dahil ~300 MB)
!pip install pyspark

# 2) SparkSession kur
from pyspark.sql import SparkSession

spark = (
    SparkSession.builder
    .appName("notebook-demo")
    .master("local[*]")  # yerel mod, tüm çekirdekleri kullan
    .config("spark.ui.enabled", "true")
    .getOrCreate()
)

# 3) Veriyi oku (örnek: GCS'ten)
df = spark.read.csv("gs://elif-bucket/data/orders.csv", header=True, inferSchema=True)
df.groupBy("kategori").count().show()

localhost:4040 üzerinden Spark UI’ı görebilirsin — DAG, stage, executor’lar. Colab’ın ücretsiz VM’i tek bir makine olduğu için cluster değil.

Colab ne zaman uygun?

  • Ödev, prototip, keşif amaçlı analiz.
  • 1-2 GB veri, tek bir kişi çalışıyor.
  • Bir gün boyunca çalışacak, bittiğinde sonuç kaydedilecek bir iş.

Colab ne zaman uygun değil?

  • Üretim pipeline’ı (günde bir kez otomatik çalışacak).
  • Birden çok kişi aynı ortamı paylaşacak.
  • 50 GB+ veri, uzun süren işler.

Google Dataproc: Üretim için Managed Spark

Dataproc, GCP’nin Spark + Hadoop ekosistemi için optimize edilmiş managed cluster hizmeti. Sen kaç makine istediğini söylüyorsun, GCP hepsini ayağa kaldırıyor, sen sadece iş gönderiyorsun.

Cluster mimarisi

Dataproc cluster’ı şef + aşçılar yapısında:

  • Master node (1 veya 3): Driver + YARN ResourceManager + HDFS NameNode.
  • Worker node (N): Executor’lar + NodeManager + DataNode.
  • Preemptible/spot: Düşük öncelikli, ucuz, ama isteğe bağlı düşebilir.

Cluster açmak

gcloud CLI ile:

gcloud dataproc clusters create elif-batch \
  --region=europe-west1 \
  --zone=europe-west1-b \
  --master-machine-type=n1-standard-4 \
  --master-boot-disk-size=100 \
  --worker-machine-type=n1-standard-4 \
  --num-workers=4 \
  --worker-boot-disk-size=200 \
  --image-version=2.1-debian11 \
  --optional-components=JUPYTER \
  --initialization-actions=gs://goog-dataproc-initialization-actions-europe-west1/connectors/connectors.sh

Seçenekler:

  • --master-machine-type: Şef makinesinin tipi. Sorgu planlaması burada çalışır.
  • --num-workers: Aşçı sayısı. Daha fazlası = daha paralel iş.
  • --image-version: Spark + Hadoop versiyonu. Sabitlemek çok önemli.
  • --optional-components=JUPYTER: Web tabanlı defteri açar.
  • --initialization-actions: Cluster açılırken koşacak scriptler (BigQuery connector gibi).

Açılması 90-120 saniye sürer. Cluster çalıştığı sürece dakika başına ücret ödenir.

İş gönder

İki yol var:

Yol 1: PySpark script

gcloud dataproc jobs submit pyspark \
  --cluster=elif-batch \
  --region=europe-west1 \
  --properties="spark.executor.memory=4g" \
  gs://elif-bucket/jobs/rapor.py

--properties ile Spark config’ini override edebilirsin.

Yol 2: Spark Submit jar

gcloud dataproc jobs submit spark \
  --cluster=elif-batch \
  --region=europe-west1 \
  --jar=gs://elif-bucket/jars/rapor.jar \
  --args="--input=gs://elif-bucket/data/"

Cluster kapatmak

Cluster çalışırken ücret öder. İş bitince kapat:

gcloud dataproc clusters delete elif-batch --region=europe-west1

Maliyet optimizasyonu:

  • Geliştirme sırasında tek node ile çalış (master + worker aynı makinede).
  • Üretimde preemptible/spot worker’lar ekle (%80 ucuz, ama düşebilir).
  • Her gün değil sadece iş zamanı açık tut.

GCS → Dataproc → BigQuery: Tam Hattın Anatomisi

Google Cloud’da üretim batch pipeline’ı tipik olarak üç servisin üzerine kurulur:

┌─────────┐    ┌──────────────┐    ┌────────────┐
│   GCS   │───▶│  Dataproc    │───▶│  BigQuery  │
│ (veri)  │    │ (işleme)     │    │ (analitik) │
└─────────┘    └──────────────┘    └────────────┘
       │                                │
       │                                ▼
       │                       ┌────────────────┐
       │                       │ Looker Studio  │
       │                       │ (dashboard)    │
       │                       └────────────────┘


  Cloud Scheduler / Airflow


  Her gece 03:00: cluster aç → iş çalıştır → kapat

GCS: Veri Gölü

Google Cloud Storage (GCS), sınırsız ölçekli nesne deposu. Dosyalar bucket içinde, her dosya bir object. Path formatı: gs://bucket-name/path/to/file.

CSV’yi GCS’e yüklemek:

gsutil cp orders.csv gs://elif-data/raw/orders/2026/06/19.csv

Bucket erişim kontrolü:

  • Uniform (eski): Tüm bucket’a tek ACL.
  • Fine-grained (eski): Dosya bazlı.
  • IAM (modern, önerilen): Roller ile. roles/storage.objectAdmin, roles/storage.objectViewer.

Üretimde her zaman IAM kullan.

Adım 1: Veriyi GCS’ten Oku

# gs://elif-bucket/jobs/rapor.py
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum as _sum, avg

spark = SparkSession.builder.appName("gece-raporu").getOrCreate()

# GCS'ten oku (wildcard destekli)
df = (
    spark.read
    .option("header", True)
    .option("inferSchema", True)
    .csv("gs://elif-data/raw/orders/2026/06/*.csv")
)

print(f"Okunan satır: {df.count()}")

Adım 2: Dönüştür ve Temizle

# Negatif fiyatları at, eksik şehirleri temizle
temiz = (
    df.filter(col("fiyat") > 0)
      .filter(col("sehir").isNotNull())
      .withColumn("tarih", col("tarih").cast("date"))
)

Adım 3: Özetle

rapor = (
    temiz
    .groupBy("sehir", "kategori")
    .agg(
        _sum("fiyat").alias("toplam"),
        avg("fiyat").alias("ortalama"),
    )
)

Adım 4: BigQuery’ye Yaz

BigQuery connector Dataproc imajında hazır gelir (initialization action’a gerek yok).

(
    rapor.write
    .format("bigquery")
    .option("table", "elif_report.satis_gunluk")
    .option("temporaryGcsBucket", "elif-data-tmp")
    .mode("overwrite")
    .save()
)

temporaryGcsBucket zorunlu: Spark, BigQuery’ye yazmadan önce GCS’e geçici dosya yazar, BigQuery oradan bulk load yapar. Doğrudan yazma yok.

Cloud Scheduler ile Zamanlama

Her gece 03:00’te cluster aç, iş çalıştır, kapat. Bunun için iki yol var:

Yol 1: Cloud Scheduler → Dataproc Workflow (önerilen)

# Workflow template oluştur
gcloud dataproc workflow templates create nightly-rapor \
  --region=europe-west1

# Cluster ekle (otomatik açılır/kapanır)
gcloud dataproc workflow templates add-job nightly-rapor \
  --region=europe-west1 \
  --step=run-rapor \
  --pyspark-file=gs://elif-bucket/jobs/rapor.py

# Scheduler tetikle
gcloud scheduler jobs create http nightly-trigger \
  --schedule="0 3 * * *" \
  --uri="https://dataproc.googleapis.com/v1/projects/elif-proj/regions/europe-west1/workflowTemplates/instantiate?alt=json"

Yol 2: Dataproc Serverless (2025+)

Cluster yönetimi tamamen GCP’de. Sadece kodu gönderirsin, saniye başına ücret ödersin.

# gs://elif-bucket/jobs/serverless.py
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("serverless-rapor").getOrCreate()
# ... iş ...
spark.stop()
gcloud dataproc batches submit pyspark \
  --region=europe-west1 \
  --deps-bucket=elif-bucket \
  gs://elif-bucket/jobs/serverless.py

Serverless, kısa süreli işler için idealdir (5-30 dakika). Uzun işler (saatler) için klasik cluster daha ekonomik.

Maliyet Karşılaştırması

Aşağıdaki rakamlar 2026 ortası GCP fiyatlarına yakındır, bölgeye göre değişir:

YapıÜcretNe için
Colab ücretsiz$0Ödev, keşif, <2 GB veri
Colab Pro$10/ayAylık ~50 saat aktif geliştirme
Dataproc küçük (1 master + 2 worker n1-standard-4)~$0.30/saatGeliştirme, küçük üretim
Dataproc büyük (1 master + 10 worker)~$1.50/saatCiddi üretim işi
Dataproc Serverless~$0.10/saat + $0.01/vCPU-saatKısa süreli batch
GCS Standard$0.020/GB-aySık erişilen veri
GCS Nearline$0.010/GB-ay30 günde bir erişilen
GCS Coldline$0.004/GB-ay90 günde bir erişilen
BigQuery aktif$6.25/TB sorguAnalitik sorgu
BigQuery depolama$0.020/GB-ayTablolar

Maliyet optimizasyonu için:

  • Cluster’ı iş bittikten sonra sil, sürekli çalışmasına bırakma.
  • Worker’ları preemptible yap (%80 ucuz, %5 düşme riski).
  • BigQuery’de partition + cluster kullan (sorgu maliyeti düşer).
  • GCS için lifecycle policy koy: 30 günden eski dosyaları Nearline’a taşı.

Colab vs Dataproc: Özet Tablo

KriterColabDataproc
KurulumYokCluster tanımı gerekir
MaliyetÜcretsiz - $50/ay$0.10-$2/saat
ÖlçekTek makineSınırsız makine
Veri~10 GB rahatPetabyte
SüreklilikOturum düşerCluster sürekli
Çok kullanıcıZorKolay (IAM)
Üretim uygunluğuHayırEvet
Öğrenme eğrisiÇok düşükOrta

Kural: Geliştirme ve öğrenme için Colab. Üretim ve ölçek için Dataproc. Ortada bir yerdeysen Dataproc Serverless dene.

Özet

Bugün öğrendik:

  • Colab = tarayıcı tabanlı, ücretsiz (sınırlı), geliştirme için ideal.
  • Dataproc = managed Spark cluster, üretim için endüstri standardı.
  • GCS = sınırsız nesne deposu, veri gölü katmanı.
  • GCS → Dataproc → BigQuery tipik bulut batch pipeline.
  • Cloud Scheduler + Workflow template ile zamanlı iş kurulumu.
  • Dataproc Serverless kısa süreli işler için yeni nesil seçenek.
  • Maliyet: cluster’ı aç-kapat, preemptible kullan, GCS tiering uygula.

Alıştırma

  1. Google Colab’da PySpark kur, basit bir tablo oluştur, localhost:4040 üzerinden Spark UI’a bak.
  2. Bir cümle yaz: “Kendi projemde Colab mı Dataproc mu seçerdim, hangi ölçek ve SLA koşulunda?”
  3. (İsteğe bağlı) GCP ücretsiz kredi hesabın varsa (öğrencilere 300$) küçük bir Dataproc cluster aç. İşi gönder. Cluster sil. Faturalamayı kontrol et.

Sıradaki

Toplu işlemeyi bitirdik. Bir sonraki derste streaming ile batch arasındaki farkı netleştiriyoruz →