apache spark : genel bir bakış

Post on 12-Jan-2017

805 Views

Category:

Data & Analytics

7 Downloads

Preview:

Click to see full reader

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?

top related