Spark’ın ismini duyup bu teknolojiyi öğrenmek istediyseniz. Klasik bir internet ortamı araması yapmışsınızdır. Sonuç olarak ta bir çok makale ve eğitim ile baş başa kalmışsınızdır. Daha kötüsü Apache Spark dokümantasyonu içine de düşmüş olabilirsiniz. Terminolojiye hakim olmadan da bu makaleleri okumak veya takıldığınız yerde çözüm aramak gerçekten de zor. Bundan dolayı bende karşılaştıkça edindiğim bilgilere göre bir başlangıç kılavuzu yazmaya başladım. Yeni terminolojiler ile karşılaştıkça onları da buraya da ekliyor olacağım.
Terimler
Spark
Apache Spark , büyük veri kümeleri üzerinde paralel olarak işlem yapmamızı sağlayan genel amaçlı bir dağıtılmış veri işleme motorudur. Scala dili ile geliştirilmiştir. Scala arka tarafta Jvm (Java Virtual Machine ) kullanmaktadır. DotNet ortamından gelen yazılımcılar için F# ile C# ikilisi gibi düşünebilirsiniz. Fakat Scala Jvm’i javadan daha efektif kullanmaktadır.
Dağıtılmış Veri / Dağıtılmış Hesaplama (Distributed Data/Distributed Computing)
Günümüzde artık veri kümeleri artık çok büyüdüler buna ek olarak anlık veri akışları da gerçekten arttı. Şimdi klasik bir sistem ile bu veriler üzerinde hesap yapmak neredeyse imkansız veya verimsiz bir hale geldi. Bundan dolayı dağıtılmış hesaplama dediğimiz sistem devreye alındı. Dağıtılmış bir bilgi işlem sisteminde, her bir bilgisayara bir düğüm ve bu düğümlerin toplanması da bir küme olarak adlandırılır. Bunu aklımızda tutarak tek bir bilgisayar yerine çoklu sistemde işlemleri bölerek hesaplatmak daha hızlı olacaktır. Tabii ki bunun zorlukları da yok değildir. Kısacası Spark çok büyük veri kümeleriyle uğraşmak ve dağıtılmış bir bilgisayar sisteminde işlemek için tasarlanmıştır.
İşleme Motoru (Processing Engine)
Birden fazla düğümde olan verinin işlenmesini sağlayan bir veri işleme motorudur. Hadoop’un MapReduce motorunun aynı prensiplerinin birçoğunu kullanarak inşa edilmiştir. Fakat bellek içi hesaplama ve işlem optimizasyonu ile toplu işlemleri hızlandırmaya odaklanmıştır. Toplu işlem (Batch Processing) ve Akan veri işleme (Stream Data Processing) için iki ayrı modeli bulunmaktadır.
Geliştirme (Development)
Spark esnek bir yapıya sahiptir. Bu yapı sayesinde bir çok uygulama alanına destek verebilmektedir. Scala, Python, Java, R ve SQL’i destekler. C#’da yakında destekler hale gelecektir. Şuan bir proje bu konuda devam ediyordu. Spark Sql adında özel bir SQL modülüne sahiptir.Bu sayede gerçek zamanlı olarak akış verilerini işleyebilir. Ayrıca bunun üzerine kurulmuş bir makine öğrenme kitaplığına ve grafik hesaplama motoruna sahiptir.
Dağıtılmış Hesaplama Terimleri
Bölümlenmiş Veri (Partitioned Data)
Bölümlenmiş veriler, birden fazla düğümde işlenebilecek şekilde optimize edilmiş verileri ifade eder. Tabloların yatay veya dikey olarak bölümlenmesi buna örnek teşkil eder. Bu konuya bakabilirsiniz.
Hata Toleransı (Fault Tolerance)
Hata toleransı, dağıtılmış bir sistemin, bir arıza meydana geldiğinde bile düzgün çalışmaya devam edebilme yeteneğidir. Spark’da veri depolamasının işlenme şekli (Spark RDD) programların hata durumlarında bile düzgün çalışmasını sağlar. Örnek olarak düğümler arasında veri iletimindeki bir problemi sayabilirsiniz.
Geç Değerlendirme (Lazy Evaluation)
Derleyicelerin çoğu matıksal bir ifade ile karşılaşınca bunu değerlendirmek ister. Yani kod parçasının anlamını kavramak ister. Bunun her kod parçası için yapılması çok verimli değildir. Çünkü kullanılmayacak olan veya çok az kullanılacak olan bir kısmı da değerlendirmeye alır. Bunun veri ile uğraşmadaki en güzel yanlarından biri sonsuz listeler ile çalışmanıza izin vermesidir. Çünkü önceden bir değerlendirme yoktur. Bu konu üzerine güzel makaleler ve örneklere bakabilirsiniz.
Spark Terimleri
Spark RDD
Esnek dağıtılmış veri kümeleridir. Bölümlendirilmiş bir kayıt koleksiyonudur. Dağıtılmış bir sistemde kayıtları işlenebilecek şekilde bölümlendirilmesine yarar. Bir kere yapıldıktan sonra bir daha değiştirilemezler.
Spark DataFrames
Spark RDD’nin tüm özelliklerinin yanı sıra şema özelliğinide içermektedir.
Spark Datasets
DataFrameler ile aynı özelliklerdedir. Datasetlerde tipler belirlenmiştir.
Dönüşümler (Transformations)
RDD leri kullanarak bunlar üzerinde yapılan işlemler sonucunda yeri RDD lerin oluşturulmasıdır. sistem bu oluşumları bir zincir olarakta kendinde tutmaktadır. Buna da lineage grafiği denmektedir.
Eylemler (Actions)
Bir veri seti oluşturmayabn işlemlerdir. Örnek olarak toplamı almak , kayıt sayısını bulmak vb. buna örnek olarak verilebilir.
İşçi Düğümü (Worker Node)
Spark uygulaması boyunca oluşan köle olarak nitelenen düğümlerdir.
Çalıştırıcı (Executor )
Sürücü Program tarafından oluşturulan görevleri yerine getirirler. İşçi Düğümü üzerinde yer almaktadırlar.
Sürücü Programı (Driver Program)
Ana Düğümde çalışan bir programdır. SparkContext’i oluşturur. İşlemleri çalıştırıcıların anlayacağı görevlere dönüştürür.
Küme Yöneticisi (Cluster Manager)
Küme Yöneticileri izleme, zamanlama ve güvenlik sağlar. Apache Mesos veya Spark Standalone Cluster gibi harici bir servistir.