apache spark : genel bir bakış
TRANSCRIPT
Apache Spark
BURAK KÖSE
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.
...
● 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
Nasıl Ortaya Çıktı?
Nasıl Ortaya Çıktı?
● 2009 UC Berkeley● 2013’den beri Apache çatısı altında● 2014 üst seviye Apache projesi● databricks.com
Neden Spark?
● Performans● Geliştirici verimliliği● Zengin API● ...
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ı!
Performans
● 1PB(1000TB)● Spark - 234 minutes / 190 nodes / AWS
Performans
● İteratif algoritmalarda çok hızlı
● Mümkün olduğunda memory kullanan yaklaşım
Zengin API
● map()● reduce()● filter()● sortBy()
● map()● reduce()
● join() ● groupByKey()● first()● count()
ve çok daha fazlası ...
Daha Az Kod, Daha Çok İşÖrneğin Hadoop’da basit bir kelime sayma işlemi
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(_ + _)
Peki Neler Sağlıyor?
Nasıl Çalışıyor?
TerminolojiBu 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
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
...
RDD’ler read-only ve immutable’dır
İşleyebilirsin ama değiştiremezsin
Okuyabilirsin ama yazamazsın
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.
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
Spark Fonksiyonları - Örnekler● scala> val nums = sc.parallelize(List(1,2,3)) //trans● scala> nums.foreach(println) //action
312
● scala> val squared = nums.map((num) => num*num) //trans● scala> squared.foreach(println) //action
149
...● scala> val even = squared.filter(_ % 2 == 0) //trans● scala> even.foreach(println) //action
4
● scala> val ranges = nums.flatMap(0 to _) //trans● ranges.foreach(println) //action
012010123
...● scala> nums.collect //action
Array[Int] = Array(1, 2, 3)● scala> nums.take(2) //action
Array[Int] = Array(1, 2)● scala> nums.count //action
Long = 3● scala> nums.reduce(_ + _) //action
Int = 6
Key/Value RDD
● Bir tuple objesi ile gösterilirler. Örn: (key,value)● Yeni transformation işlemleri vardır.Örn: reduceByKey()
```val lines = sc.textFile("data.txt") //transformationval pairs = lines.map(s => (s, 1)) //transformationval counts = pairs.reduceByKey((a, b) => a + b) //action```
● Anahtar tabanlı işlemleri kolaylaştırırlar.
Genel bir bakış...
...
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ı)
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)
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
Deployment
CLUSTER
● Standalone● Mesos● YARN● Amazon EC2
LOCAL
● Single threaded:SparkContext(‘local’)
● Multi-threaded:SparkContext(‘local[4]’)
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
...
Online Kurslar…(edX)
● Introduction to Big Data with Apache Spark● Scalable Machine Learning
Referanslar
● http://spark.apache.org/● Learning Spark
O'Reilly Media● Introduction to Apache Spark
MAMMOTH DATA● The Data Scientist’s Guide to Apache Spark
GALVANIZE
SORULAR?