Data Engineering

Veri Göllerinde ACID İşlemlerinin Kilidini Açma: Apache Hudi’ye Derin Bir Bakış

Gelişen veri mühendisliği manzarasında, geleneksel veri gölü mimarisi kritik bir darboğazla karşı karşıya: ACID (Atomiklik, Tutarlılık, İzolasyon, Dayanıklılık) işlemleri için yerel destek eksikliği. Veri gölleri muazzas ölçeklenebilirlik ve düşük maliyetli depolama sunarken, birden fazla yazarın veriyi aynı anda değiştirmeye çalıştığı durumlarda veri bütünlüğü konusunda zorluklar yaşar. İşte Apache Hudi (Hadoop Upserts Deletes and Incrementals), HDFS, S3 ve ADLS gibi dağıtık depolama sistemlerinde doğrudan verimli veri güncellemeleri ve artımlı veri işleme sağlayarak bu sorunu çözen açık kaynaklı bir çerçevedir.

Apache Hudi Hangi Sorunu Çözer?

Tarihsel olarak, bir veri gölünde depolanan Parquet veya ORC dosyasındaki bir kaydı güncellemek istediğinizde, tüm dosyayı yeniden yazmanız gerekirdi. Bu işlem hesaplamalı olarak pahalı ve verimsizdir. Apache Hudi, dosya düzeyinde "Upsert" (Güncelle + Ekle) ve "Sil" kavramını sunar. Bu değişiklikleri meta veri yönetimi ve verimli depolama formatları kullanarak yönetir; bu da nokta-zaman sorgularına ve sürekli veri entegrasyonuna olanak tanır.

Hudi, Kayıt Anahtarı ve Bölüm Yolunu uygulayarak, büyük veri kümeleri içinde belirli kayıtları tanımlayabilir; bu da tüm veri kümesini değil, yalnızca gerekli dosyaların güncellenmesini sağlar. Bu yetenek, modern veri göl evi mimarileri oluşturmak için temel bir bileşendir.

Temel Mimari Kavramlar

Hudi’den etkili bir şekilde yararlanmak için geliştiricilerin temel bileşenlerini anlaması gerekir. Sistem, veri alımını yönetmek için birkaç temel parametreye dayanır:

  • Kayıt Anahtarı: Her satır için benzersiz bir tanımlayıcı (örneğin, user_id).
  • Bölüm Yol: Veriyi bölmek için kullanılan dizin yapısı (örneğin, ds=2023-10-01).
  • İşlem Türleri: Hudi, Ekle (INSERT), Upsert ve Sil (DELETE) işlemlerini destekler.

Hudi, Yazma-Zamanı Kopyalama (COW) ve Okuma-Zamanı Birleştirme (MOR) dahil olmak üzere çeşitli tablo türlerini destekler. COW tabloları, güncellemelerin temel dosyalara uygulandığı, okuma ağırlıklı iş yükleri için optimize edilmiştir. MOR tabloları ise tam tersine, yazma gecikmesini en aza indirmek ve verimliliği artırmak için son değişiklikleri ayrı günlük dosyalarında tutarak yazma ağırlıklı iş yükleri için tasarlanmıştır.

Spark ile Pratik Uygulama

Apache Hudi’nin entegrasyonu, Apache Spark ile sorunsuzdur. Aşağıda, PySpark kullanarak bir Hudi tablosunu kaydetme ve bir upsert işlemi gerçekleştirme konusunda pratik bir örnek bulunmaktadır. Bu örnek, bir DataFrame'i Hudi tablosu olarak yazmayı ve optimize edilmiş okuma performansı için tablo türünü COW olarak belirtmeyi gösterir.

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("HudiUpsertExample") \
    .getOrCreate()

# Alınacak örnek veri
data = [
    (1, "Alice", 30, "2023-10-01"),
    (2, "Bob", 25, "2023-10-01"),
    (3, "Charlie", 35, "2023-10-01")
]

df = spark.createDataFrame(data, ["id", "name", "age", "dt"])

# Hudi için tablo özelliklerini tanımla
props = {
    "hoodie.table.name": "hudi_test_table",
    "hoodie.datasource.write.partitionpath.field": "dt",
    "hoodie.datasource.write.recordkey.field": "id",
    "hoodie.table.type": "COPY_ON_WRITE",
    "hoodie.datasource.write.operation": "upsert"
}

# DataFrame'i Hudi'ye yaz
df.write \
    .format("hudi") \
    .options(**props) \
    .mode("overwrite") \
    .save("s3://my-bucket/data/hudi_table")

Zaman Yolculuğu ve Artımlı Sorgular

Hudi’nin en güçlü özelliklerinden biri "Zaman Yolculuğu"dur. Hudi her değişikliği kaydettiği için, verilerinizin geçmişteki herhangi bir anındaki durumunu sorgulayabilirsiniz. Bu, veri kalitesi sorunlarını halletmek veya ayrı tarihsel anlık görüntüler tutmadan tarihsel durumları çoğaltmak için paha biçilmezdir. Ayrıca, Hudi artımlı sorgulara olanak tanır; bu sayede aşağı akış süreçleri, son alımdan bu yana gerçekleşen değişiklikleri yalnızca alabilir ve bu da işlem maliyetlerini önemli ölçüde azaltır.

Sonuç

Apache Hudi, geleneksel veri gölleri ile modern analitiklerin sağlam işlem gereksinimleri arasındaki boşluğu doldurur. Upsertler, silme işlemleri ve zaman yolculuğu için yerel destek sağlayarak, veri mühendislerinin güvenilir, ölçeklenebilir ve maliyet etkin veri göl evi mimarileri oluşturmalarına olanak tanır. Yapılandırma ve yönetimde bazı karmaşıklıklar getirse de, ucuz nesne depolamasında ACID uyumluluğunun sunduğu faydalar, yüksek hacimli ve sık güncellenen veri kümeleriyle uğraşan kuruluşlar için ikna edici bir seçenek haline getirir.

Share: