2. Apache Spark Nedir?
Apache Spark™ Scala programlama dili ile geliştirilen
büyük ölçekli verileri hızlı bir şekilde işlemek için
oluşturulmuş genel amaçlı bir platformdur.
3. ...
● Dağıtık hesaplama için bir framework
● In-memory, fault tolerant veri yapıları
● Scala, Java, Python, R, SQL destekleyen API
● Açık kaynak
7. Performans
● Graysort benchmark (100TB)
● Hadoop - 72 minutes / 2100 nodes / datacentre
● Spark - 23 minutes / 206 nodes / AWS
● Aslında durum HDFS vs Memory
● Yeni sürümleri ile çok daha hızlı!
10. Zengin API
● map()
● reduce()
● filter()
● sortBy()
● map()
● reduce()
● join()
● groupByKey()
● first()
● count()
ve çok daha fazlası ...
11. Daha Az Kod, Daha Çok İş
Örneğin Hadoop’da basit bir kelime sayma işlemi
12. Daha Az Kod, Daha Çok İş
Oysa Spark’da (Scala)
val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
15. Terminoloji
Bu terimler nedir?
Driver SparkContext’e sahip proses
Executor Bir veya daha fazla görevi yürüten proses
Master Kümeler arası uygulamaları yöneten proses
Worker Kendi Executor’larını yöneten proses
16. RDD nedir?
● RDD = Resilient Distributed Dataset
● Immutable, Fault-tolerant
● Parallel işletilirler
● Resilient: Eğer veri kaybolursa yeniden yarat
● Distributed: Dağıtık
● Dataset: Veri manuel yaratılabileceği gibi
otomatik olarak da yaratılabilir
17. ...
RDD’ler read-only ve immutable’dır
İşleyebilirsin ama değiştiremezsin
Okuyabilirsin ama yazamazsın
18. Spark Fonksiyonları
Transformations
● Lazy Evaluation
● Geriye yeni bir
RDD döndürür
Actions
● Geriye gerçek bir
değer döndürür
Transformation bir action ile karşılaşana
kadar işletilmez.
19. Lazy Evaluation
import scala.util.Random
val headsRDD = sc.parallelize(0 to 1000)
.map(_ => Random.nextDouble)
.filter(_ < 0.51)
headsRDD.count
>> 509
Yukarıdaki kod parçasında 2 numaralı bölümde yapılan tüm
işlemler transformation’dır. Dolayısı ile lazy evulationdır. 2
numaralı bölüm ancak 3 numaralı bölümdeki gibi bir action ile
karşılaşılana kadar hesaplanmamıştır.
1
2
3
25. ...
1. Elindeki verilerden RDD'ler oluştur.
2. Yeni RDD'ler elde et.(Transformation aşaması)
3. Eğer birden fazla işlem yapılacak ise Spark'a
persist işlemini bildir.
4. Elindeki veriyi işle.(Action aşaması)
26. RDDs – cache()
● cache() / persist()
● İlk kez bir action ile karşılaşıldığında,
sonucu bellekte tut anlamına gelir.
● Sadece bellek değil, çeşitli seviyeleri
vardır.
● rdd.persist(StorageLevel.DISK_ONLY)
27. Persistence Seviyeleri
Seviye Yer Kullanımı CPU Kullanımı Bellekte mi? Diskte mi? Açıklama
MEMORY_ONLY Yüksek Düşük Evet Hayır
MEMORY_ONLY_SER Düşük Yüksek Evet Hayır
MEMORY_AND_DISK Yüksek Orta Birazı Birazı
Veri bellek için fazla büyükse veri
parçalarını diske koymaya başlar
MEMORY_AND_DISK_SER Düşük Yüksek Birazı Birazı
Veri bellek için fazla büyükse veri
parçalarını diske koymaya başlar.
Serilize edilerek saklanır
DISK_ONLY Düşük Yüksek Hayır Evet
29. Nereden Öğrenebilirim?
Yayınlanmış kitaplar...
● Learning Spark
● Advanced Analytics with Spark
● Fast Data Processing with Spark
● Machine Learning with Spark
● Spark Cookbook
● Spark in Action
● Spark GraphX in Action