Data Engineering

Lakehouse'u Şifre Çözme: Apache Iceberg, Delta Lake ve Hudi Derinlemesine İnceleme

Veri mühendisliği manzarası köklü bir değişim geçirdi. Yıllar boyunca kuruluşlar, veri göllerinin ölçeklenebilirliği ve maliyet etkinliği ile veri ambarlarının performansı, yönetişimi ve ACID uyumluluğu arasında seçim yapmak zorunda kaldı. "Lakehouse" mimarisinin ortaya çıkması bu ikiliği etkili bir şekilde ortadan kaldırmış, nesne depolamasının (S3 veya GCS gibi) düşük maliyetli depolama avantajlarından yararlanırken bir veritabanının işlemsel güvenilirliğini sunan birleşik bir yığın sunmuştur.

Modern Lakehouse'un kalbinde açık tablo formatları yer alır: Apache Iceberg, Delta Lake ve Apache Hudi. Bu teknolojiler nesne depolamasının üzerinde konumlanır ve şema evrimini, zaman yolculuğunu (time travel) ve yüksek performanslı sorgu yürütmesini yöneten meta veri katmanları ekler. Bu yazıda, bu teknolojilerin nasıl çalıştığını ve nasıl uygulanacağını keşfedeceğiz.

Açık Tablo Formatlarının Üçlüsü

Üç format da aynı problemi çözmeyi amaçlasa da, farklı kökenlere ve güçlü yönlerine sahiptir.

Delta Lake

Databricks tarafından yönetilen Delta Lake, veri göllerine ACID işlemleri getirir. Parquet dosyalarının üzerine inşa edilmiştir ve değişiklikleri takip etmek için JSON tabanlı bir işlem günlüğü kullanır. Delta Lake, özellikle Apache Spark ekosisteminde güçlüdür ve makine öğrenimi iş akışlarıyla mükemmel entegrasyon sunar.

Apache Iceberg

Netflix tarafından oluşturulmuş ve artık Apache üst düzey bir projesi olan Iceberg, yüksek performanslı analitik ve geniş uyumluluk odaklıdır. Meta verileri veriden ayırarak, çoklu hesaplama motorlarının (Spark, Trino, Flink, Presto) tedarikçi kilidinden (vendor lock-in) kaçınarak aynı tabloya okuma ve yazma yapmasına olanak tanır. Iceberg, üstün bölüm evrimi ve anlık görüntü izolasyonu (snapshot isolation) ile sıkça övülür.

Apache Hudi

Uber'dan gelen Hoodie (Hudi), artımlı işleme uzmanlaşmıştır. Ölçeklenebilir düzeyde ekleme/güncelleme (upsert) ve silme işlemlerine olanak tanır; bu da onu gerçek zamanlı analitik ve CDC (Değişiklik Verisi Yakalama) hatları için ideal kılar. Mevcut kayıtlarda sık güncellemeler gerektiren kullanım durumlarınız varsa, Hudi genellikle daha üstün bir seçenektir.

Spark ve Delta Lake ile Pratik Uygulama

PySpark kullanarak bir Delta tablosu oluşturmaya yönelik pratik bir örneğe bakalım. Bu örnek, veri güvenilirliği için kritik iki özellik olan zaman yolculuğunu ve şema zorlamasını nasıl etkinleştireceğinizi gösterir.

from pyspark.sql import SparkSession

# Delta Lake desteğiyle Spark Oturumunu başlatma
spark = SparkSession.builder \
    .appName("DeltaLakeExample") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .getOrCreate()

# Şema zorlamasıyla bir Delta tablosuna veri yazma
data = [(1, "Alice", 30), (2, "Bob", 25)]
df = spark.createDataFrame(data, ["id", "name", "age"])

# Delta formatı olarak kaydetme
df.write.format("delta") \
    .mode("overwrite") \
    .option("mergeSchema", "true") \
    .save("/data/delta/lakehouse_table")

# Zaman Yolculuğu: Veriyi 1 saat önceki haline göre sorgulama
# df_historical = spark.read.format("delta").option("timestampAsOf", "1 hour ago").load("/data/delta/lakehouse_table")

Meta Veri Yönetimi ve Yönetişim

Herhangi bir lakehouse mimarisinin kritik bir bileşeni meta veri yönetimidir. İster Iceberg ister Delta seçin, meta veri havuzunuzun yüksek erişilebilirliğe sahip olduğundan ve yedeklendiğinden emin olmalısınız. Bu formatlar, verinin durumunu takip etmek için Iceberg'de bir manifest dosyasına veya Delta'da bir işlem günlüğüne dayanır. Bu meta veriler kaybolursa, veri dosyaları okunamaz veya tutarsız hale gelebilir.

Ayrıca, bu tablo formatlarını Apache Hive veya AWS Glue gibi birleşik bir katalogla entegre etmek merkezi yönetişim sağlar. Bu, Trino'da etkileşimli SQL sorguları yürüten veya Spark'ta toplu işleme yapan tüm hesaplama motorları boyunca veri keşfi, erişim kontrolü ve izlenebilirlik takibinin tutarlı olmasını sağlar.

Sonuç

Iceberg, Delta Lake ve Hudi arasındaki seçim genellikle mevcut teknoloji yığınınıza ve spesifik iş yükü gereksinimlerinize bağlıdır. Ancak, açık tablo formatlarına doğru yapılan hareket tartışmasızdır. Depolamayı hesaplamadan ayırarak ve sağlam meta veri katmanları sunarak kuruluşlar, ölçeklenebilir, maliyet etkin ve son derece güvenilir veri platformları oluşturabilir. Bir sonraki veri mimarinizi tasarlarken, verilerinizin nerede yaşadığına ek olarak, meta veri katmanlarınızın bütünlüğünü ve erişilebilirliğini nasıl yönettiğini de göz önünde bulundurun.

Share: