- Yaklaşık 1,75 GB satranç maçı verisi, Hadoop yerine komut satırı araçlarıyla işlendiğinde yalnızca 12 saniyede tamamlandı; bu da Hadoop’un 26 dakikasına kıyasla 235 kattan fazla daha hızlı performans gösterdi.
- grep, sort, uniq, awk, xargs, mawk gibi temel kabuk komutları birleştirilerek akış tabanlı işleme hattı kuruldu ve bellek kullanımı neredeyse sıfırda tutuldu.
- xargs ile paralel işleme ve mawk optimizasyonu sayesinde CPU çekirdeklerinin kullanım oranı artırılırken IO darboğazı en aza indirildi.
- Aynı veri kümesini Hadoop kümesiyle (7 adet c1.medium instance) işlemeye kıyasla maliyet ve bakım yükü belirgin biçimde daha düşüktü.
- Tek bir makinede de verimli veri analizi yapılabileceğini gösterirken, gereksiz Big Data araçları kullanımına karşı bir uyarı sunuyor.
Giriş: Hadoop’tan daha hızlı komut satırı işleme
- Amazon EMR ve mrjob ile yaklaşık 2 milyon satranç maçını analiz eden bir örnekten yola çıkılarak, aynı veri komut satırı tabanlı akış işleme ile yeniden üretildi.
- Hadoop kümesinde (7 adet c1.medium) 26 dakika sürdü, 1.14MB/sec işlem hızı elde edildi.
- Yerel dizüstü bilgisayarda ise 12 saniyede tamamlandı ve 270MB/sec işlem hızı görüldü.
- Basit sonuç toplama işleri için kabuk boru hatlarının Hadoop’tan çok daha verimli olduğu gösterildi.
- Kabuk komutları birleştirilerek Storm’a benzer paralel akış işleme yapısı tek makinede kurulabildi.
Veri yapısı ve hazırlık
- Veri, PGN (Portable Game Notation) biçimindeki satranç maçı kayıtlarından oluşuyor ve her oyunun sonucu
"Result" satırında belirtiliyor.
"1-0" beyazın galibiyeti, "0-1" siyahın galibiyeti, "1/2-1/2" ise beraberlik anlamına geliyor.
- GitHub’daki rozim/ChessData deposundan yaklaşık 3.46GB veri kümesi alındı.
- Bu, Tom Hayden’ın deneyinde kullandığı 1,75 GB verinin yaklaşık iki katı büyüklüğünde.
Temel boru hattının kurulması
Paralelleştirme ve optimizasyon
Sonuç: Basitliğin verimliliği
- Büyük ölçekli dağıtık işleme gerçekten gerekli değilse, tek makinedeki kabuk araçlarının birleşimi daha hızlı ve daha ekonomik olabilir.
- Hadoop, çoğu zaman ilişkisel veritabanı ya da basit betiklerle yeterince çözülebilecek işler için bile gereğinden fazla kullanılıyor.
- Komut satırı tabanlı akış analizi, performans, uygulama maliyeti ve bakım kolaylığı açısından güçlü bir alternatif sunuyor.
2 yorum
Eskiden Taco Bell programlama diye bir ifade vardı; sanki benzer bir felsefe gibi.
Hacker News yorumları
Bu yazının 2014'ten olması en üzücü tarafı.
Şimdi Airflow, dbt, Snowflake gibi daha da fazla soyutlama katmanı var ve fiilen tamamen RAM'e sığan veri kümelerinin üstüne bile bunlar bindiriliyor.
Startup'lar günde 10GB bile etmeyen logları işlemek için dağıtık kümelere ayda 5 bin dolar yakıyor. Sebebi de şu: “Modern Data Stack” kullanırsan terfi alıyorsun, ama bash scripti ile çözersen “ölçeklenmez” diye küçümseniyorsun. Verimlilikle teşvikler tamamen birbirinden kopmuş durumda
Günde 1GB JSON ingest eden bir örnek bile vardı; ben de “tek makine yeter” diye açıklayınca “teknik olarak doğru ama duymak istediğimiz cevap bu değil” deyip beni elemişlerdi.
Günümüz makinelerinde TB düzeyinde RAM ve yüzlerce çekirdek var. Tek bir makine zaten inanılmaz büyük
DevOps geçmişi olan insanları alırken gösterişli framework deneyimini öne çıkarınca, onlar da şirkete gelip aynı şeyi tekrar ediyor.
Karşı çıkan kimse olmayınca, masaüstü bir bilgisayarın tek başına halledebileceği işler gereksiz yere karmaşıklaşıyor
Özgeçmişimde neredeyse hiç en yeni framework olmadığı için bir yılı aşkın süredir iş arıyorum ve kendimi aptal gibi hissetmeye başladım
2014'te 4GB olağandı ama şimdi SSD üzerinden streaming hızları da çok arttı; yerel SSD'den okumak bazen kümeden daha iyi olabiliyor
Yazının yazarı benim!
Eski yazının hâlâ işe yaradığını görmek sevindirici.
Durumun daha da kötüleştiği görüşüne katılıyorum ama bir yandan da microservices saplantısından uzaklaşan bir hareket görmek umut verici.
Performansı iyileştirmek için uğraşan herkese destek olsun. Hâlâ umut var
Yazıyı birkaç kez yeniden okudum ve ilham alıp Waters-Series'i JavaScript'e port ederek stream pipeline'ı kurdum
Bugün sektörde Spark ya da dağıtık araçların veri mühendisliğinin tek doğru cevabı olduğu yönünde aşırı güçlü bir algı var.
Bu, web geliştirmede SPA framework'lerinin gereğinden fazla kullanılmasına benziyor.
Benim tavsiyem şu:
Yöneticilerin duymak istediği şey “her şey sonsuza kadar ölçeklenir” değil, “sistem güvenilir şekilde çalışıyor” güvencesi
Veri boyutu güç yasasına uyduğu için petabayt ölçeğinde veriyle çalışan mühendis sayısı çok az.
Ama maaş artışı için bu tür deneyimleri CV'ye koymaya çalışınca aşırı mühendislik ortaya çıkıyor
Sebebini sorunca cevap “öyle yapmamız gerekiyor” oldu. Muhtemelen özgeçmişe yazmak için ya da birilerinin politik hesabı içindi
Yazıyla ilgili tarihsel bir not:
mrjob adlı araç, Hadoop olmadan yerel modda da çalışabiliyordu.
Küçük veri kümelerinde kümeden çok daha hızlıydı. Özellikle AWS EMR gibi geçici kümelerden bile daha çabuk bitiyordu.
Yine de yazarın yaklaşımı muhtemelen bundan da verimliydi.
MapReduce büyük ölçekte genişlemeyi kolaylaştırıyordu ama küçük veride verimsiz kısıtlar da getiriyordu.
2010'ların başında mrjob ile petabayt ölçeğinde veri işledim ama bugün neredeyse hiç kullanılmıyor
Veri mühendisi olarak çalışırken Bash/Python scriptlerini C# ile yeniden yazarak JSON işleme hızını 1GB/s'ye kadar çıkarmıştım.
Sadece streaming parse gibi optimizasyonlar bile büyük fark yarattı.
O yüzden merak ediyorum — hangi veri boyutundan sonra kümeleme gerçekten anlamlı olmaya başlıyor?
Bana göre bir iş bir günden uzun sürüyorsa dağıtık işlemeyi düşünmeye değer
Veri büyükse örnekleme yapıp Excel'de analiz ettiğini söylemişti. Bugünlerde LLM sayesinde basit Python/Bash scriptleri yazmak da kolaylaştı
S3 gibi object storage üzerinden doğrudan okuma yazma yapılabiliyor ve bugün 100GB/s hızlar bile mümkün
Diske sığar ama sıradan bir dizüstü için imkânsız bir boyut
Verinin “büyüklüğü”, ne yapmaya çalıştığınıza göre değişir.
Örneğin ameliyat verilerinde basit istatistikler için bash yeterli olabilir ama doktor deneyimiyle başarı oranı arasındaki korelasyonu hesaplamak istediğinizde karmaşıklık hızla artar.
Bu yüzden şirket açısından “biz Spark kullanıyoruz” demek, “her soru için özel motor kuruyoruz” demekten çok daha kolay
Bahsedilen bütün sorunlar tek bir sunucuda basit araçlarla çözülebilir
Bu yazı daha önce HN'de birkaç kez paylaşılmıştı.
2018 versiyonu, 2022 versiyonu, 2024 versiyonu aynı gönderici tarafından paylaşılmıştı
Eski Shakti web sitesindeki tanıtım cümlesini hatırlattı:
“1K satır: Excel / 1M satır: Pandas / 1B satır: Shakti / 1T satır: Only Shakti”
Kaynak
Pek çok geliştirici Windows ortamında yetiştiği için CLI araçlarına alışık değil.
Oysa CLI; örtük döngüler, alanları otomatik ayırma, regex'leri paralel uygulama gibi güçlü özellikler sunuyor.
Bu sayede hızlıca ad-hoc çözümler üretilebiliyor ve büyük sistemlere geçmeden önce iyi bir başlangıç noktası oluyor
Satranç verisini çok daha büyütüp benchmark'ı yeniden yapmak ilginç olabilir diye düşünüyorum.
Bugün Lichess veri kümesi yaklaşık 7B oyun, 2.34TB sıkıştırılmış (14TB sıkıştırılmamış).
Bu ölçekte Hadoop kazanabilir mi diye merak ediyorum
Ama bunun karşılığında özel sunucu yönetimi gerekiyor.
EMR, veriye seyrek erişildiğinde (günde 1-10 kez) paralel işleme için tasarlanmış bir model