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:
- Nerede çalışacak? (Colab, kendi VM, Dataproc, EMR, Databricks…)
- Veri nerede? (yerel disk, GCS/S3, HDFS)
- 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ı | Ücret | Ne için |
|---|---|---|
| Colab ücretsiz | $0 | Ödev, keşif, <2 GB veri |
| Colab Pro | $10/ay | Aylık ~50 saat aktif geliştirme |
| Dataproc küçük (1 master + 2 worker n1-standard-4) | ~$0.30/saat | Geliştirme, küçük üretim |
| Dataproc büyük (1 master + 10 worker) | ~$1.50/saat | Ciddi üretim işi |
| Dataproc Serverless | ~$0.10/saat + $0.01/vCPU-saat | Kısa süreli batch |
| GCS Standard | $0.020/GB-ay | Sık erişilen veri |
| GCS Nearline | $0.010/GB-ay | 30 günde bir erişilen |
| GCS Coldline | $0.004/GB-ay | 90 günde bir erişilen |
| BigQuery aktif | $6.25/TB sorgu | Analitik sorgu |
| BigQuery depolama | $0.020/GB-ay | Tablolar |
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
| Kriter | Colab | Dataproc |
|---|---|---|
| Kurulum | Yok | Cluster tanımı gerekir |
| Maliyet | Ücretsiz - $50/ay | $0.10-$2/saat |
| Ölçek | Tek makine | Sınırsız makine |
| Veri | ~10 GB rahat | Petabyte |
| Süreklilik | Oturum düşer | Cluster sürekli |
| Çok kullanıcı | Zor | Kolay (IAM) |
| Üretim uygunluğu | Hayır | Evet |
| Öğrenme eğrisi | Çok düşük | Orta |
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
- Google Colab’da PySpark kur, basit bir tablo oluştur,
localhost:4040üzerinden Spark UI’a bak. - Bir cümle yaz: “Kendi projemde Colab mı Dataproc mu seçerdim, hangi ölçek ve SLA koşulunda?”
- (İ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 →