Bana büyük veri projelerinin neden %80'inin beklenen sonuçları veremediğini soranlara verdiğim cevap basit: sorun teknolojide olmuyor. Benim ortamımda ekiplerin Hadoop, Spark veya Kafka clusterları alıp içine ham veri atarak sihir beklediğini görüyorum. Öyle yürümüyor. Büyük veri projeleri belirsiz iş hedefleri, kötü veri kalitesi, eksik pipeline'lar ve sıfır operasyonel disiplin yüzünden başarısız oluyor.
Daha önce beklenti vs operasyon uçurumu yazımda (https://furkanikkan.com/urun/buyuk-veri-projeleri-neden-hala-basarisiz-oluyor-beklenti-vs-operasyon-ucurumu-31) belirttiğim gibi, paydaşların beklentisi ile production'da yaşanan gerçekler arasındaki uçurum devasa. Bu uçurumu yaratan nedenleri ve benim nasıl kaçındığımı aşağıda anlatıyorum.
Belirsiz İş Hedefleri Büyük Veri Projelerini Erken Öldürür
Büyük veri girişimlerinin bir numaralı başarısızlık nedeni, kimsenin başarının neye benzediğini tanımlamamış olması. "Verimizi daha iyi kullanmak istiyoruz" hedefiyle toplanılan toplantılarda bulundum ben. Bu bir hedef değil — bu bir dilek.
Şu üç soruya cevap veremiyorsanız henüz pipeline kurmayın:
- Bu veri hangi spesifik kararı yönlendirecek?
- Çıktıyı kim tüketecek ve ne sıklıkla?
- Beklediğimiz ölçülebilir iş etkisi ne?
Cevaplar yoksa bir cluster kurar, compute bütçesini yakar ve kimsenin bakmadığı dashboardlar teslim edersiniz. Bunun yaşandığını sayamayacağım kadar çok gördüm.
Kötü Veri Kalitesi Pipeline'ınızı İşe Yaramaz Hale Getirir
n Çöp girer, çöp çıkar sadece bir laf değil — dokunduğum her büyük veri projesinin gerçekliği bu. Ekipler haftalarını Spark job'ları mimarilemeye harcar, kaynak veriyi profillemeye sıfır zaman ayırır.
Ben tek bir pipeline yazmadan önce şunları yaparım:
- Kaynak tablolarda temel profiling çalıştırırım — null'lar, duplicate'ler, outlier'lar.
- Tarihsel snapshot'lar arası schema drift kontrol ederim.
- İş tanımlarının verinin gerçekten içerdiğiyle uyuştuğunu doğrularım.
PySpark'ta hızlı bir kontrol:
from pyspark.sql.functions import col, count, when
df.select([count(when(col(c).isNull(), c)).alias(c) for c in df.columns]).show()
Kaynak veriniz tutarsızsa, ne kadar Kafka veya Airflow koyarsanız koyun sizi kurtarmaz. Önce upstream sorununu çözün.
Veri Pipeline'larında Operasyonel Disiplin Eksikliği
Burada sysadmin geçmişim devreye giriyor. Büyük veri projeleri tek seferlik inşaatlar gibi muamele görüyor ama aslında monitoring, alerting ve bakım gereken production sistemleri.
Ben veri pipeline'larına herhangi bir production servisine davrandığım gibi davranıyorum. Yani:
- Her job'un logging'i ve SLA monitoring'i var.
- Hatalar alert tetikler — root cause'u gizleyen sessiz retry'lar değil.
- Backup ve recovery test edilir, varsayılmaz. Daha önce yazdığım gibi, restore testi olmayan backup sadece boşuna disk işgalidir (https://furkanikkan.com/urun/geri-yukleme-testi-olmayan-yedekleme-sadece-bosuna-disk-isgalidir-34).
Pipeline'ınız sabah 3'te başarısız oluyor ve kimse sabah raporu yanlış çıkana kadar fark etmiyorsa, pipeline'ınız yok — bir sorumluluğunuz var.
Stack'i Aşırı Mühendislik Yapmak
Sürekli gördüğüm başka bir pattern: ekipler doğru indexing ile bir PostgreSQL kutusunun işi rahatça götüreceği yerde devasa bir Hadoop cluster'ıyla başlıyor. Her veri sorunu distributed computing gerektirmiyor.
Scale out yapmadan önce her zaman sorarım:
- Bu makul kaynaklarla tek node'da çalışabilir mi?
- Gerçek veri hacmi ne — ölçülmüş, tahmin edilmemiş?
- Real-time streaming mi gerekiyor yoksa batch processing iş görür mü?
Aşırı mühendislik sadece para israf etmez. Hataları daha olası kılan ve debugging'i zorlaştıran operasyonel karmaşıklık ekler. Eklediğiniz her bileşen bozulabilecek bir şey daha demek.
Net Veri Sahipliği Yok
Sahibi olmayan veri çürür. Kurduğunuz kişi şirketten ayrıldığı için aylarca kimsenin bakmadığı tablolar gördüm ben. Dokümantasyon yok, lineage yok, kolonların ne anlama geldiği bilinmiyor.
Benim kuralım: her veri setinin bir sahibi, dokümante edilmiş bir schema'sı ve bir freshness SLA'sı var. Sahibi yoksa production'a girmiyor.
İpucu: Bir veri katalog aracı kullanın — basit bir wiki sayfası bile hiç olmamasından iyi. Amaç, yeni birinin verinin ne anlama geldiğini orijinal oluşturucuyu bulmaya çalışmadan anlayabilmesi.
Büyük Veri Projelerine Nasıl Farklı Yaklaşıyorum
Benim deneyimimde gerçekten çalışan yaklaşım şu:
- Teknoloji seçimiyle değil, spesifik bir iş sorusuyla başlayın.
- Bir şey kurmadan önce kaynak veriyi profilleyin ve temizleyin.
- Soruyu cevaplayan en basit pipeline'ı kurun.
- Birinci günden monitoring ve alerting ekleyin.
- Gerçek kullanıcıların geri bildirimine göre iterasyon yapın.
O listede neyin eksik olduğuna dikkat edin: Hadoop, Kafka, Spark, trend olan hangi cloud servisi olursa. Onlar çözüm değil, araç. Ben onları en son seçerim, en önce değil.
Önemli Olan Gerçek Metrik
Büyük veri projelerinin çoğu teknik milestone'lara göre değerlendirilir — cluster'lar deploy edildi, pipeline'lar kuruldu, terabaytlar işlendi. Bu yanlış metrik. Benim her zaman sorduğum soru şu: bu veri yüzünden kimse bir kararı değiştirdi mi?
Cevap hayırsa, mimari ne kadar zarif görünürse görünsün proje başarısızdır. Teknoloji kolay kısmı. Temiz veri, net hedefler ve operasyonel disiplini doğru yapmak, teslim eden projeleri etmeyen %80'den ayıran şey.
Kapak görseli: ₡ґǘșϯγ Ɗᶏ Ⱪᶅṏⱳդ · CC0 (Openverse / kamu malı) · https://www.flickr.com/photos/148598741@N02/52786101642
