Spark'ta Veri Çarpıklığını Yönetmek: Partitioning ve Broadcast Join Rehberi

Apache Spark büyük veriyi paralel işlediği için hızlı çalışır. Veriler partisyonlara bölünür ve her partisyon ayrı bir görev olarak işlenir. Sorun, bir partisyona diğerlerinden çok daha fazla veri düştüğünde başlar, buna data skew deniyor. Bu durumda hızlı görevler bitip beklerken, o ağır partisyon hala çalışıyor. Tüm işin hızı bu yavaş göreve bağlı kalıyor.

Partitioning, join stratejisi ve skew yönetimi birbiriyle sıkı sıkıya bağlı. Partitioning, verilerin nereye gideceğini belirler. Join işlemleri sırasında veri shuffle'ı (karıştırılması) pahalı bir işlemdir. Skew varsa, az sayıda görev çok uzun çalışırken diğerleri boş oturuyor.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Broadcast join bu sorunu hafifletebilir. Eğer bir tablo küçükse (örneğin lookup tablosu), onu tüm executor'lara kopyalayıp shuffle'dan kaçınabilirsin. Böylece büyük fact table'ı taşımak yerine küçük tabloyu yayınlarsın.

Uygulamada, fact table'ın büyük olduğu ve lookup table'ların küçük olduğu senaryolarda broadcast join çok etkili. Partisyon sayısını ve join stratejisini doğru seçmek, Spark işlerinin hızını ciddi oranda artırabilir. Skew'i tespit etmek için partition boyutlarını izlemek ve gerekirse repartition ya da salt dağıtımı kullanmak gerekir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz