Post on 25-Jun-2020
Tecnologie e metodologie di Big Data Analytics -Apache Spark
Simone Angelini
Fondazione Ugo Bordoni
sangelini@fub.it
2 Luglio 2019
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 1 / 31
Outline
1 IntroduzioneArchitettura HadoopComponenti PrincipaliArchitetturaHDFSYARN
2 SparkPanoramicaCome funzionaArchitetturaConfigurazioneRDDComponenti principali
3 Hadoop vs Spark - Comparazione dei tempi di esecuzione
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 2 / 31
Apache Hadoop
Apache Hadoop
Framework open source per l’immagazzinamento e il calcolo distribuito digrandi quantita di dati:
Ispirato dal Google File System (GFS) e da MapReduce di Google
Gestione di cluster di grandi dimensioni (migliaia di nodi)
Sistema di calcolo per processi di tipo batch
Fault Tolerant
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 3 / 31
Apache Hadoop - Componenti
Componenti Principali
Hadoop Common
Hadoop Distributed File System (HDFS)
Hadoop YARN
Hadoop MapReduce
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 4 / 31
Hadoop 1.0 vs Hadoop 2.0
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 5 / 31
HDFS - Hadoop Distributed File System
Strato di astrazione che si occupa dell’immagazzinamento dei dati
File System (basato su Java) distribuito su piu macchine
File suddivisi in blocchi da 128MB (default)
Master (NameNode) - gestisce il file system ed in particolare ilnamespace, cioe l’elenco dei nomi dei file e dei blocchi (e relativerepliche)
Slaves (DataNode) - contengono i dati veri e propri. Gestisconofisicamente le operazioni sui blocchi (creazione, cancellazione, replica)
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 6 / 31
Architettura HDFS
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 7 / 31
YARN
IDEA
Dividere le responsabilita di MapReduce (Hadoop 1.0) in due parti:
Una parte che si occupa della gestione delle risorse(ResourceManager)
Una parte che si occupa della pianificazione e del monitoraggio delleattivita di ogni applicazione (ApplicationMaster)
PANORAMICA
Introdotto dalla versione 2.0 di Hadoop
Supporta anche modelli di programmazione non-MapReduce
Strato di astrazione che si occupa della gestione delle risorse
Fornisce un’architettura altamente ottimizzata per l’accesso ai datimemorizzati su HDFS
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 8 / 31
YARN
IDEA
Dividere le responsabilita di MapReduce (Hadoop 1.0) in due parti:
Una parte che si occupa della gestione delle risorse(ResourceManager)
Una parte che si occupa della pianificazione e del monitoraggio delleattivita di ogni applicazione (ApplicationMaster)
PANORAMICA
Introdotto dalla versione 2.0 di Hadoop
Supporta anche modelli di programmazione non-MapReduce
Strato di astrazione che si occupa della gestione delle risorse
Fornisce un’architettura altamente ottimizzata per l’accesso ai datimemorizzati su HDFS
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 8 / 31
YARN
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 9 / 31
Esempio di utilizzo di Hadoop
PROBLEMA
Hadoop, al termine di ogni fase scrive i risultati su HDFSOperazione molto lenta!
ESEMPIO
Applichiamo l’algoritmo LSH a 4 fasi su un insieme di documenti
4 Job MapReduce
Al termine di ogni singolo job, i risultati intermedi sono memorizzatisu HDFS
4 Scritture e 4 Letture da Disco!
SOLUZIONE
Apache Spark
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 10 / 31
Esempio di utilizzo di Hadoop
PROBLEMA
Hadoop, al termine di ogni fase scrive i risultati su HDFSOperazione molto lenta!
ESEMPIO
Applichiamo l’algoritmo LSH a 4 fasi su un insieme di documenti
4 Job MapReduce
Al termine di ogni singolo job, i risultati intermedi sono memorizzatisu HDFS
4 Scritture e 4 Letture da Disco!
SOLUZIONE
Apache Spark
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 10 / 31
Esempio di utilizzo di Hadoop
PROBLEMA
Hadoop, al termine di ogni fase scrive i risultati su HDFSOperazione molto lenta!
ESEMPIO
Applichiamo l’algoritmo LSH a 4 fasi su un insieme di documenti
4 Job MapReduce
Al termine di ogni singolo job, i risultati intermedi sono memorizzatisu HDFS
4 Scritture e 4 Letture da Disco!
SOLUZIONE
Apache Spark
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 10 / 31
Esempio di utilizzo di Hadoop
PROBLEMA
Hadoop, al termine di ogni fase scrive i risultati su HDFSOperazione molto lenta!
ESEMPIO
Applichiamo l’algoritmo LSH a 4 fasi su un insieme di documenti
4 Job MapReduce
Al termine di ogni singolo job, i risultati intermedi sono memorizzatisu HDFS
4 Scritture e 4 Letture da Disco!
SOLUZIONE
Apache Spark
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 10 / 31
Apache Spark
Punti chiave su Spark
un singolo framework per la gestione di applicazioni batch, interattivee real-tima
integrazione nativa con Python, Scala, R e Java (solo Java non hauna shell interattiva)
general purpose - non solo map-reduce
Puo essere eseguito su diversi Cluster Manager (Hadoop YARN,Mesos, Standalone, cloud).
Puo accedere a varie sorgenti di dati (HDFS, Cassandra, HBase, S3)
i risultati delle operazioni intermedie vengono salvate in memoriaprincipale
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 11 / 31
Spark Environment
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 12 / 31
Spark - Come funziona
La prima cosa che un programma Spark deve fare e creare un oggettoSparkContext:
viene creato dal programma Driver e specifica configurazione ecomportamento dell’applicazione
Se si utilizzano le shell interattive, la creazione dello SparkContext eeffettuata automaticamente al caricamento dell’ambiente (si puorichiamare attraverso l’oggetto sc)
Lo SparkContext verra poi utilizzato per creare nuovi oggetti.
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 13 / 31
Architettura di Spark
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 14 / 31
Master e slave
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 15 / 31
Il master di Spark 1/2
Configurazione del Master
Nella configurazione del context, dobbiamo specificare un parametromaster. Questo parametro puo essere scelto tra:
local: Spark verra eseguito localmente senza parallelismo (solo unworker thread)
local[k]: Spark verra eseguito localmente con un parallelismo di k (kworker thread. Il miglior valore di k e il numero di core disponibilisulla macchina)
spark://host:port: connessione a un cluster Spark standalone
yarn://host:port: connessione a un cluster YARN
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 16 / 31
Il master di Spark 2/2
Compiti del Master
connessione a un Cluster Manager
richiede e gestisce gli executor sui nodi del cluster. Executor sonoprocessi che sono utilizzati per eseguire calcoli e immagazzinare dati
invia il codice dell’applicazione ad ogni executor
assegna compiti ad ogni executor
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 17 / 31
Resilient Distributed Datasets (RDD) 1/6
Che cos’e un RDD
Struttura dati fondamentale di Spark, e una collezione immutabile edistribuita di oggetti.
Ogni RDD e diviso in partizioni multiple, che possono essere utilizzateper effettuare calcoli paralleli su diversi nodi del cluster.
Gli RDD possono contenere tutti i tipi di oggetti dei linguaggiPython, Java o Scala, incluse classi definite dall’utente.
Per creare un RDD
Un RDD puo essere creato in due modi:
caricamento da un dataset esterno (JSON,HDFS,MySQL,CSV...)
distribuzione di una collezione di oggetti nel programma driver (adesempio una lista o un insieme di dati)
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 18 / 31
Resilient Distributed Datasets (RDD) 1/6
Che cos’e un RDD
Struttura dati fondamentale di Spark, e una collezione immutabile edistribuita di oggetti.
Ogni RDD e diviso in partizioni multiple, che possono essere utilizzateper effettuare calcoli paralleli su diversi nodi del cluster.
Gli RDD possono contenere tutti i tipi di oggetti dei linguaggiPython, Java o Scala, incluse classi definite dall’utente.
Per creare un RDD
Un RDD puo essere creato in due modi:
caricamento da un dataset esterno (JSON,HDFS,MySQL,CSV...)
distribuzione di una collezione di oggetti nel programma driver (adesempio una lista o un insieme di dati)
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 18 / 31
Resilient Distributed Datasets (RDD) 2/6
Operazioni sugli RDD
Trasformazioni : Costruisce un nuovo RDD da un precedente RDD.Operazioni lazy (pigre), i risultati delle operazioni non vengonocalcolate immediatamente, ma si tiene traccia solo delletrasformazioni applicate all’RDD
ottimizza le computazioni richiestepermette il recupero di dati persi da partizioni danneggiate
Azioni : calcolano un risultato basato su un RDD e il risultato e inviatoal programma Driver, o salvato su sistema di store esterno (HDFS)
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 19 / 31
Resilient Distributed Datasets (RDD) 2/6
Operazioni sugli RDD
Trasformazioni : Costruisce un nuovo RDD da un precedente RDD.Operazioni lazy (pigre), i risultati delle operazioni non vengonocalcolate immediatamente, ma si tiene traccia solo delletrasformazioni applicate all’RDD
ottimizza le computazioni richiestepermette il recupero di dati persi da partizioni danneggiate
Azioni : calcolano un risultato basato su un RDD e il risultato e inviatoal programma Driver, o salvato su sistema di store esterno (HDFS)
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 19 / 31
Resilient Distributed Datasets (RDD) 3/6
Trasformazione Descrizione
map(func)restituisce un nuovo dataset distribuito costruitopassando ciascun elemento della sorgente attraverso una funzione func
filter(func)restituisce un nuovo dataset costruito selezionando tutti quegli elementidella sorgente su cui func restituisce true
flatMap(func)simile a map, ma per ogni oggetto di input posso avere 0 o piu oggetti di output(per cui func dovrebbe restituire un array di elementi piuttosto che un singolo elemento)
union(altroDataset)restituisce un nuovo dataset che contiene l’unione degli elementidel dataset sorgente e del dataset passato come argomento
distinct([numTasks])) restituisce un nuovo dataset che contiene gli elementi distinti del dataset sorgente
groupByKey([numTasks]) quando richiamata su un dataset di coppie (K, V), restituisce un dataset di coppie (K, Seq[V])
reduceByKey(func,[numTasks])quando richiamata su un dataset di coppie (K, V), restituisce un dataset di coppie (K, V) dove i valoriper ogni chiave sono aggregati usando la corrispondente funzione di reduce
sortByKey([ascending],[numTasks])quando richiamata su un dataset di coppie (K, V), dove K implementa Ordered (ed e quindi una lista ordinabile),restituisce un dataset di coppie (K, V) ordinate sulle chiavi in ordine crescente o decrescente,come specificato dall’argomento booleano ascending
join(otherDataset,[numTasks])quando richiamata su dataset di coppie (K, V) e (K, W),restituisce un dataset di coppie (K, (V, W)) con tutte le coppie degli elementi per ogni chiave
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 20 / 31
Resilient Distributed Datasets (RDD) 4/6
Azione Descrizionereduce(func) aggrega gli elementi del dataset usando la funzione func (che prende 2 argomenti in input e ne restituisce uno)
collect() restituisce tutti gli elementi del dataset come un array di oggetti al programma driver
count() restituisce il numero di oggetti del dataset
first() restituisce il primo elemento del dataset – simile a take(1)
take(n)restituisce un array con i primi n elementi del dataset –attualmente non eseguito in parallelo,ma il programma driver calcola tutti gli elementi
saveAsTextFile(path)scrive gli elementi del dataset come file di testo su una data cartella del filesystem locale,del filesystem distribuito (HDFS) o qualsiasi altro filesystem supportato da Hadoop
saveAsSequenceFile(path)scrive gli elementi del dataset come HadoopSequenceFile su una data cartella del filesystem locale,del filesystem distribuito (HDFS) o qualsiasi altro filesystem supportato da Hadoop.
countByKey() disponibile solo su RDD di tipo (K, V). Restituisce un ‘Map‘ di (K, Int) coppie con il conteggio per ciascuna chiave
foreach(func) esegue una funzione func su ciascun elemento del dataset.
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 21 / 31
Resilient Distributed Datasets (RDD) 5/6
Persistenza degli RDD
Spark puo effettuare la persistenza di un dataset utilizzato tra varieoperazioni in memoria principale (anche detta operazione di cache deidati).
Ciascuna parte di un dataset risicede su ogni nodo del cluster, e sarautilizzato se necessario
Di solito la cache dei dati permette un miglioramento di 10 volte delleperformance nell’esecuzione di Azioni.
Fault-tolerant: quando una partizione viene perduta (ad esempio inseguito ad un fallimento), verra automaticamente ricalcolata usandole precedenti trasformazioni
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 22 / 31
Resilient Distributed Datasets (RDD) 6/6
Persistenza Descrizione
MEMORY ONLYImmagazzina l’RDD come oggetti Java deserializzati nella JVM.Se l’RDD non entra in memoria, alcune partizioni non saranno messe in memoria principalee saranno ricalcolate al volo ogni volta che sara necessario
MEMORY AND DISKmmagazzina l’RDD come oggetti Java deserializzati nella JVM.Se l’RDD non entra in memoria, immagazzina le partizioni che eccedono su discoe verranno lette da disco ogni volta che saranno necessarie.
MEMORY ONLY SERImmagazzina l’RDD come oggetti Java serializzati (un byte array per ogni partizione).Generalmente e piu efficiente dal punto di vista del’occupazione dello spazio rispetto agli oggetti deserializzati,specialmente quando viene utilizzato un serializer efficiente (ad es. KryoSerializer), ma piu costoso in termini di computazioni per la lettura dei dati.
MEMORY AND DISK SER Simile a MEMORY ONLY SER, ma mette le partizioni che non entrano in memoria principale su disco invece che ricalcolarle al volo ogni volta che sono necessarie.
DISK ONLY Immagazzina le partizioni dell’RDD solo su disco.
MEMORY ONLY 2, MEMORY AND DISK 2, etc Simili ai livelli spiegati sopra, ma replica ogni partizione su 2 nodi del cluster.
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 23 / 31
Componenti di Spark 1/6
Spark Core
Contiene le funzionalita base di Spark:
componenti di task scheduling
componenti di gestione della memoria
componenti per il recupero dai fallimenti
principali strutture dati astratte per la gestione dei dati (RDD)
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 24 / 31
Componenti di Spark 2/6
Spark SQL
Pacchetto di Spark per la gestione e l’utilizzo di dati strutturati
Interrogazione dei dati tramite SQL (o sue varianti, come HQL)
Supporta varie sorgenti di dati (tabelle Hive, Parquet, JSON, CSV...)
La manipolazione dei dati e supportata in diversi linguaggi (Java,Python, Scala)
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 25 / 31
Componenti di Spark 3/6
Spark Streaming
Componente che permette il processamento real-time di flussi di dati
Contiene API per la manipolazione di flussi di dati attraverso gli RDDAPI di Spark Core
Progettato per essere fault tolerant, scalabile e con un altothroughput come Spark Core
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 26 / 31
Componenti di Spark 4/6
GraphX
Libreria per la gestione di grafi (ad esempio grafi sociali basati suvari tipi di relazione, messaggi di utenti, retweet, menzioni ecc.)
Clacoli sui grafi altamente parallelizzati
Creazione dei grafi a partire da RDD
Diverse funzioni e operatori nativi per la gestione dei grafi (ad es:subgraph, mapVertices ecc.)
Libreria che contiene i piu comuni algoritmi per l’analisi dei grafi(PageRank, maxOutDegree, maxInDegree etc.)
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 27 / 31
Componenti di Spark 5/6
MLib
Contiene le piu comuni funzionalita di machine learning (ML)
Vari algoritmi di Machine Learning (regressione, classificazione,clustering ecc.)
Tutti i metodi sono progettati per essere scalabili e parallelizabili
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 28 / 31
Componenti di Spark 6/6
SparkR
Pacchetto che permette l’utilizzo del linguaggio di programmazione Rsu ambiente Spark
Contiene un’implementazione distribuita dei DataFrame di R:(Distributed Data Frame)
Supporta le operazioni tipiche di R (selezione, filtering, aggregazioneecc.)
Pacchetto in continua evoluzione, essendo una delle ultimecomponenti aggiunte all’ecosistema Spark
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 29 / 31
LSH su Hadoop-Spark 1/2
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 30 / 31
LSH su Hadoop-Spark 2/2
Simone Angelini (Fondazione Ugo Bordoni) Tecnologie e metodologie di Big Data Analytics 2 Luglio 2019 31 / 31