sviluppo di sistemi scalabili con apache sparkdataframe datasets 17 componente di machine learning...

23
Sviluppo di sistemi scalabili con Apache Spark Alessandro Natilla - 22/10/2016 1

Upload: others

Post on 21-May-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

Sviluppo di sistemi scalabili con Apache Spark

Alessandro Natilla - 22/10/20161

Page 2: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

Outline

● Big Data● Cosa è Apache Spark● Storia di Spark● Spark vs MapReduce● Componenti di Apache Spark● Foundations: RDD e operazioni● Modello di esecuzione● Esempi● Deploying● Riferimenti

2

Page 3: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Velocity● Volumes● Variety● Value

Fonti● Social Media● GPS data● IoT● Sensors Networks

Big Data

3

Page 4: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Framework per massive parallel computing

● Basato su Direct Acyclic Graph (DAG) computing engine

● in-memory computation○ Hadoop MapReduce svolge operazioni su disco

● Apache Project (spark.apache.org)

Cosa è Apache Spark

4

Page 5: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Progetto nato presso l’Università di Berkeley nel 2009

● Progetto Apache dal 2013

● Progetto top-level dal 2014

● I creatori hanno fondati databricks.com

● Giunto alla versione 2.0.1 (last stable)

Storia

5

Page 6: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Graysort benchmark, http://sortbenchmark.org/

● Hadoop - 72 minutes / 2100 nodes / datacentre

● Spark - 23 minutes / 206 nodes / AWS

Spark vs Hadoop Mapreduce

6

Page 7: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

Esempio classico: Word Count on Hadoop

7

Obiettivo

Contare il numero di occorrenze di ciascuna parola in un testo

Logica

Per ogni parola, associarvi il valore intero 1.

Si ottiene una lista di coppie (parola, 1).

Aggregazione delle coppie in base alla parola chiave utilizzando una funzione associativa (somma).

Si ottiene una lista di coppie dove il primo elemento corrisponde alla parola, il secondo elemento coincide con il numero totale di occorrenze nel testo

Page 8: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

from pyspark import SparkContext

logFile = "hdfs:///input"sc = SparkContext("spark://spark-m:7077", "WordCount")textFile = sc.textFile(logFile)

wordCounts = textFile.flatMap(lambda line: line.split()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)

wordCounts.saveAsTextFile("hdfs:///output")

Esempio classico: Word Count su Spark (Python API)

8

Page 9: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

Componenti di Spark

9

Page 10: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Analytics (batch / streaming)

● Machine Learning

● ETL (Extract - Transform - Load)

● Datawarehousing

Applicazioni concrete

10

Page 11: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● RDD = Resilient Distributed Dataset

● Collezione di dati immutabile

● Fault-tolerant

● Parallel

Fondamenti: Resilient Distributed Datasets (RDD)

11

Page 12: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Trasformazioni

● Azioni

● Le trasformazioni sono operazioni lazy

● Le trasformazioni vengono compiute dalle azioni

Fondamenti: operazioni

12

PRONo problemi di concorrenza in contesti di elaborazione distribuitiTutti i nodi lavorano su partizioni differenti dei dati

Page 13: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● map(): trasformazione

● filter(): filtraggio

● flatMap(): trasformazione dati

● sample(): campionamento

● …

RDDs – Trasformazioni vs Azioni

● reduce(): applicazione operazione associativa

● count(): conteggio

● saveAsTextFile()

● …

13

Page 14: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

Modello di esecuzione di Spark

● I jobs sono cittadini di prima classe

● L’invocazione di una azione causa l’esecuzione di un job per evadere una richiesta

● Spark esamina il grafo degli RDD, producendo un piano di esecuzione che tenga conto delle risorse disponibili

Job

14

Page 15: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Micro-batches (DStreams of RDDs)

● Disponibile per tutte le componenti (MLLib, GraphX, Dataframes, Datasets)

● Fault-tolerant

● Connettori per TCP Sockets, Kafka, Flume, Kinesis, ZeroMQ, ...

Streaming

15

Page 16: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Libreria di astrazione dati

● Idea presa in prestito da Python/R

● Supporto per JSON, Cassandra, HBase, Hive, SQL databases, etc.

● Sintassi più semplice rispetto agli RDD

● Datasets vs Dataframes○ type-safe, interfaccia object-oriented programming○ utilizzano l’ottomizzare nativo○ elaborazione dei dati in-memory

Spark SQL

16

Page 17: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

val sqlContext = new org.apache.spark.sql.SQLContext(new SparkContext())val df = sqlContext.read.json("people.json")

df.show()df.filter(df("age") >= 35).show()

df.groupBy("age").count().show()

Dataframe vs Dataset: contare numero di persone con età > 35

case class Person(name: String, age: Long)

val people = sqlContext.read.json("/people.json").as[Person]

people.filter(_.age >= 35).show()

people.groupBy(_.age).count().show

Dataframe

Datasets

17

Page 18: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Componente di Machine Learning

● Include implementazioni per algoritmi quali for NaiveBayes, logistic regression, k-means clustering, ALS, word2vec, random forests, etc.

● ML introduce il concetto di pipelines

● Operazioni su matrici (dense / sparse), fattorizzazioni matriciali, etc.

● Basic statistics

MLLib / ML

http://spark.apache.org/docs/latest/mllib-guide.html 18

Page 19: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Contiene algoritmi su grafi

● Operazioni su vertici e archi

● Include l’algoritmo PageRank

● Combinabile with Streaming/SparkSQL/MLLib/ML

GraphX

19

Page 20: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Standalone

● YARN (Hadoop ecosystem)

● Apache Mesos

Deploying Spark

20

Page 21: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● Traditional (write code, submit to cluster)

● REPL (write code interactively, backed by cluster)

● Interactive Notebooks (iPython/Zeppelin)

Using Spark

21

Page 22: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

Interactive Notebooks

22

Page 23: Sviluppo di sistemi scalabili con Apache SparkDataframe Datasets 17 Componente di Machine Learning Include implementazioni per algoritmi quali for NaiveBayes, logistic regression,

● spark.apache.org

● databricks.com

● zeppelin.incubator.apache.org

● mammothdata.com/white-papers/spark-a-modern-tool-for-big-data-applications

References

23