12 Mart 2017 Pazar

Appache Cassandra Veri Aktarma



Her hangi bir RDBMS veri tabanı sisteminden Cassandra'ya geçişte karşılaşılan büyük çaplı sorunlardan biri de mevcut veriyi aktarmak. Cassandra söz konusu olduğunda en azından 100M/200M satıra sahip tablolardaki verinin aktarılması gerekir. Bunun için de geliştirilmiş bazı özel yaklaşımlar mevcut. Ben bu yazıda kendi yaşadığımın deneyimi aktarmak istiyorum.
Cassandra'ya bulk veri yüklemek için çeşitli yöntemler geliştirilmiş durumda. sstableloader Cassandra Bulk Loader ile ilgili bazı dokümanlar Datastax'ın sitesinde mevcut. Ancak bir miktar yazılım geliştirme yapılması gerekiyor. İnternette çok fazla kaynak da bulamadığınızdan sancılı bir süreç.
Bu genel probleme Brian Hess isimli bir geliştirici çok güzel ve kullanışlı bir ara yüz yazmış. Bununla ilgili Java programına bu linkten erişebilirsiniz. Kullanımı oldukça kolay ve çok stabil olduğunu düşünüyorum. Örneğin ben bir projemizde MS SQL 2014'te bulunan yaklaşık 500M kayda sahip bir tabloyu başarılı bir şekilde export ettim. Madde madde yapılanları özetlemek gerekirse :
  • SQL Server'den tabloyu yaklaşık 60M-70M'luk kayıtlar içerecek şekilde csv formatında export ettim. Bununla ilgili bu yazıya göz atabilirsiniz.


  • Cassandra-loader uygulamasını Java 8 yüklü bir sunucuya indirdim. Bunun için daha önce konfigüre konfigüre ettiğim Cassandra Cluster sunucularından birini kullandım. Ubuntu 14.04 sunucu üzerinde gayet stail bir şekilde çalıştığını söyleyebilirim. Aşağıdaki kod ile oluşturulan bu csv dosyaları sizin için Java Cassandra kütüphanesinin bulk insert fonksiyonları ile oldukça hızlı bir şekilde insert ediliyor.Buraya çok farklı parametreleri argüman olarak sağlayabilirsiniz. Bununla ilgili sitede açıklamalar mevcut. Örneğin aşağıda 45.32.xx.xx ip'de yer alan Cassandra sunucusu üzerinden MyKeyspace Cassandra veri tabanında yer alan MyTablo tablosuna her satırda 4 kolon olacak şekilde ve ayraç olarak TAB(\t) karakteri ile ayrılmış 60M satırlık csv dosyasını 10 paralel thread ile çalışacak şekilde insert etmesini, hata durumu oluşursa (eksik kolonlu satır vs.) 20000 hata oluşana dek bu işleme devam etmesini söylüyoruz. Dahasını ihtiyacınıza göre konfigüre edebilrisiniz.
./cassandra-loader -f /opt/cassandra-loader/MyTablo140to200M.csv -host 45.32.xx.xx -schema "MyKeyspace.MyTablo(col1, col2, col3, col4)" -delim "\t" -maxInsertErrors 20000 -maxErrors 20000 -numThreads 10
  • Uygulama dosyadaki satırları 100K lık kümeler halinde insert ederek bunları ilerleme durumunu ekrana basıyor.
    İşlem Durumu

  • İşlem logları da aynı dizinde .BADPARSE, .BADINSERT ve .LOG uzantılı dosyalar olarak tutuluyor.
  • Benim çalışmalarımda gördüğüm kadarıyla 60M kayıt yaklaşık 30 dakikada tablolara insert edilmişti.Dosyaların her biri yaklaşık 10GB ve bunları 30dakikada insert edebilmek çok güzel :)
Cassandra'ya geçişlerin en zorlu kısımlarından biri büyük verilerin yeni ortama aktarılması işlemi. Henüz bu işlemi bir kaç tık ile yapabilmek mümkün olmadığından bir miktar çalışma yapmak gerekiyor. Bu işlemi kolaylaştırmak için yazılmış güzel bir uygulamanın işimizi ne kadar kolaylaştırdığını anlatmaya çalıştım. Sizin de tecrübelerinizi paylaşmanızı bekliyorum. Yeni yazıda görüşmek üzere.

Hiç yorum yok:

Yorum Gönder