Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
HDFS
È il file system distribuito di Hadoop, progettato per HW economico e per essere altamente
tollerante ai guasti, fornisce un accesso ad elevato numero di operazioni al secondo( Throughput)
Innanzitutto, la prima assunzione è che ci sia sempre qualche componente che non funziona e
quindi essere sempre pronto al recovery.
La seconda è che Hadoop non è progettato per applicazioni interattive, ma di tipo batch;
l’enfasi è
dunque, più sul Throughput per accedere ai dati (grazie al parallelismo) che sulla latenza.
La terza è sulla dimensione: supportare dati molto grandi è la norma memorizzare su HDFS dati
di TB i file system standard hanno dei limiti non sono in grado di gestire file di queste dimensioni.
Tra gli obiettivi troviamo il modello write-once-read-many, ovvero, quando si accede ad un file in
un sistema distribuito sorge il problema della consistenza: se intendo leggere un file da un’altra
macchina, ci si interroga su quale sia la copia alla quale sto accedendo.
In Hadoop si elimina questo problema consentendo una solo scrittura di un file, dunque, un
aggiornamento comporta la produzione di ulteriori file, ciò chiaramente crea problemi di
saturazione, in ogni caso, lo scenario dei file immutabili, è stato decisivo per ridurre il problema
della consistenza.
Il secondo obiettivo è che spostare il calcolo è più economico di spostare il dato, cioè,
nodo è più efficiente che spostarlo su un’altra
effettuare il calcolo sulla macchina dove è presente il
macchina (ciò non è sempre possibile).
L’ultimo principio è la portabilità rispetto ad HW e SW eterogeneo, Hadoop è tutto realizzato in
java (portabilità). HDFS usa un’architettura master/slave,
un cluster HDFS consiste in:
• NameNode(server master) che
esegue operazioni sul namespace del file
system come aprire, chiudere e rinominare
file e directory e determina la mappatura
dei blocchi sui DataNode.
• DataNode sono responsabili della
gestione delle richieste di lettura e scrittura
da client del file system e eseguire la
creazione, l'eliminazione e la replica di
blocchi istruzione dal NameNode.
Un file è diviso in blocchi, i blocchi sono replicati e assegnati ai vari DataNodes.
Il NameNode esegue le operazioni legate al naming dei file (nome del file, seguendo il meccanismo
dei path di UNIX) e gestisce le operazioni tipiche (apertura, chiusura, creazione), gestisce inoltre la
mappatura sui i vari DataNodes.
I DataNode sono responsabili delle richieste di lettura e scrittura ed effettuano fisicamente le
operazioni.
Si può lavorare in HDFS con comandi simili a quelli di UNIX, è possibile creare directory e
memorizzare file ecc. Inoltre, è possibili spedicare il numero di repliche.
il NameNode usa un log transazionale (Edit
Log) per poter memorizzare in maniera
permanente le modifiche del FS serve per le
operazioni di rollback eventuali., il log è
memorizzarti nel file system locale del
NameNode.
FSImage contiene il mapping di tutti i file verso i
vari DataNode, sempre memorizzato nel FS
locale, se per sfortuna si perdesse questo file non
potremmo accedere ai file.
Tutte le operazioni di accesso in w/r sono mediate dal client HDFS che può essere il terminale o la
nostra applicazione Java M-R che al suo interno effettua delle operazioni sui file.
Il client può fare operazioni di apertura, lettura e chiusura di un file, se esse sono soddisfatte
chiedono al NN quali sono le locazioni dei blocchi.
La write è simile, per gestire la ridondanza, il DataNodes fa una pipeline di write: scrive su sé stesso
e sui nodi indicati dal NN. l’overhead della
NN e DNs sono oggetti java che girano, JVM è minimo ed è trascurabile
rispetto al vantaggio introdotto in portabilità.
Si può accedere al HDFS mediate le API di Java oppure la FS shell, un terminale da far partire
all’interno di quello di Linux. Inoltre, in HDFS è presente la cartella trash, una cartella
temporizzata: un cestino che vien svuotato di default ogni 6 ore.
YARN
Il sistema di gestione delle risorse detto anche Yet Another Resource Negotiator si occupa di
allocare le risorse per le diverse applicazioni che girano in un cluster Hadoop.
È fondamentale schedulare i task, le prime versioni non lo permettevano ed era tutto demandato al
c’era un accoppiamento stretto tra il motore
processo master, di esecuzione e HDFS.
In un’architettura cluster si colloca tra il file system e il motore d’esecuzione, può allocare risorse in
modo dinamico.
Lo scheduler di default è il classico FIFO, tuttavia si possono aggiungere dei plugin con degli
scheduler da noi definiti, come il Fair Scheduler.
È presente un modulo, JobTracker, che supervisiona il job(intera applicazione) stesso che a sua
volta crea dei TaskTrackers che invece eseguono e monitorano i singoli task map-reduce
MapReduce e Hadoop (parte 3) 12/11/2020
Riprendiamo YARM Il
resourceManager è il gestore
globale, accetta i job dagli utenti, li
schedula, e alloca le risorse
necessarie per l’esecuzione.
In ogni nodo di elaborazione è
presente il cosiddetto
NodeManager che interagisce con il
resourceManager da cui riceve le
cose da fare e a cui invia
informazioni di monitoraggio su
cosa sta facendo.
L’ApplicationManager è un
processo che viene creato per ogni applicazione che viene seguita.
In un nodo si avrà un solo NodeManager, ,ma tanti ApplicationManager quante sono le
applicazioni che si stanno eseguendo.
Il client interagisce con il resourceManager che a sua volta interagisce con i vari NodeManager e
ognuno di essi si occupa di eseguire l’applicazione specifica che gira sul nodo (non necessariamente
un’applicazione Hadoop) Ottimizzazione della località dei dati
Spostare i dati non è conveniente, si perde del tempo
che talvolta è superiore al tempo di elaborazione.
L’idea è quello di associare il task al nodo dove si trova
il dato; non dobbiamo usare la banda. Talvolta, però, il
blocco del dato su HDFS non può essere processato in
loco perché occupato con altre elaborazioni; si cerca di
L’ultimo
spostarlo su un altro nodo dello stesso reck.
caso è quello in cui anche questo scenario è
impraticabile e si sposta fuori dal reck.
Reducer
diversi possibili dataflow all’interno di un
esistono
singolo job M-R. In alcuni casi, non è presente la
fase di reducing o, in altri casi, può essere
sufficiente un singolo reducer.
Avremo un certo numero di mapper, n, segue la
fase di shuffling e infine il reducing. Il numero di
blocchi che ogni mapper produce devono
sempre essere pari a quello dei reducer,
Nel caso di due reducer i mapper produrranno un
output diviso in due blocchetti; ogni chiave viene
passata ad una funzione di hash che genera o 0
(primo blocchetto e quindi primo reducer) o 1
(secondo
blocchetto).
Tutti i primi blocchetti vengono copiate sul FS
del primo reducer, i secondo invece in quello
del secondo reducer.
Dopodiché avvengono le due merge. A differenza
del caso precedente, l’output è suddiviso in due
se siamo interessati all’unione è
file,
necessario effettuare un’altra procedure, anche M-R.
Il partitioner è un componente implementato dal programmatore che definisce un meccanismo di
assegnamento delle chiavi intermedie (e valori) non sulla base dell’ hash ma sulla base di una
politica da noi scelta.
Nel caso in cui sono necessarie solo operazioni di mapping; in questo caso, il valore che
normalmente è intermedio diventa il valore finale. In alcuni casi, per efficienza, si può definire un
combiner che effettua una riduzione locale sul nodo del mapper per evitare di trasmettere dati
disaggregati ai vari reducer determinando un inutile spreco di banda, il codice è praticamente quello
del reducer.
Installare Hadoop, diversi modo di fare l’installazione
1) Cluster singolo nodo, sempre possibile portarlo su un cluster vero, installiamo su una macchina
linux la distribuzione Hadoop
2) Utilizzare una macchina virtuale, ambiente di sviluppo indipendente dalla macchina
3) Usare un ambiente su Cloud, naturalmente a pagamento
Configurazione Hadoop, per ottenere buone performance
1) Dimensione del blocco HDFS, di norma di 128mb e ogni blocco replicato 3 volte per effettuare
un buon dimensionamento bisognerebbe capire il tempo che impiega il mapper ad elaborare il
singolo blocco(se mal gestito si potrebbe perdere più tempo a lanciare il mapper che ad eseguire
operazioni sul blocco stesso)
2) Configurare il numero di reducer di norma impostato a 1 possiamo mettere 0 o n
3) Tipo file system (EXT 4)
Hive e Pig 19/11/2020
Si posizionano nell’ecosistema Hadoop a livello dei sistemi verticali; Pig si colloca tra i linguaggi
di scripting (Latin), Hive permette di scrivere applicazioni di analisi su dati con un linguaggio
di quering simile a SQL.
Hive è un’applicazione del data warehousing su Hadoop, serve per eseguire le tipiche
operazioni del datawarehouse utilizzando HQL, una variante di SQL.
Le tabelle interrogate sono memorizzate in HDFS sottoforma di file piatti, originariamente
introdotto da Facebook, da molto tempo è diventato open-source.
Pig è un sistema di data processing su
con l’attenzione su analisi di tipo
larga scala
dataflow. Il vantaggio fondamentale è che,
con codice molto compatto, si permettono
operazioni che scritte in java sarebbero molto
più verbosi.
Originariamente sviluppato da Yahoo, è
l’idea
oggi open-source comune è fornire un
linguaggio più ad alto livello rispetto a quelli del
framework e compilati in job Hadoop.
Hive
Molti lavoratori del BigData non sono Informatici, ma provengono da altri domini
professionali, Hive è più ad alto livello. Fare querying su tabelle molto grandi e oneroso, dunque
Hive non lavora su DBMS relazionali, ma su tabelle costruite a partire da dati, memorizzati
come file piatti e memorizzati su HDFS, seguendo le sue politiche di suddivisione e sfruttandone
i vantaggi.
L’alternativa sarebbe riscrivere direttamente in Hadoop che, però, è più complicato, il codice è
troppo customizzato al dataset, è soggetto ad errori, avviene quasi sempre che si hanno più fasi
MR e, inoltre, non tutti conoscono SQL.
L’idea è quella di trasformare dei dati non strutturati in tabelle, a prescindere dal formato
originario, su queste tabelle sarà possibile eseguire query simili a quelle di SQL.
l’utente