L'ottimizzazione delle prestazioni in Hadoop aiuta a ottimizzare le prestazioni del cluster Hadoop. In questo articolo sull'ottimizzazione delle prestazioni di MapReduce, esplorerai innanzitutto i vari modi per migliorare le prestazioni del cluster Hadoop e ottenere i migliori risultati dalla programmazione MapReduce in Hadoop.
Quindi l'articolo tratterà sette modi o concetti importanti per Hadoop MapReduce Performance Tuning. Questi modi sono l'ottimizzazione della memoria in Hadoop, il miglioramento delle prestazioni IO, la fuoriuscita del disco della mappa in Hadoop, l'ottimizzazione delle attività di mappatura e riduzione, la scrittura di un combinatore, l'utilizzo di join asimmetriche e l'esecuzione speculativa.
Queste tecniche possono essere utilizzate per configurare cluster Hadoop nella produzione con hardware di base per migliorare le prestazioni con costi operativi minimi.
Introduzione all'ottimizzazione delle prestazioni di Hadoop MapReduce
L'installazione del cluster Hadoop nella produzione è solo metà della battaglia vinta. Per l'amministratore Hadoop, è estremamente importante ottimizzare la configurazione del cluster Hadoop per ottenere le massime prestazioni.
L'ottimizzazione delle prestazioni Hadoop aiuta a ottimizzare le prestazioni del cluster Hadoop e ottenere i migliori risultati durante l'esecuzione di lavori MapReduce nelle aziende di Big Data.
Durante l'installazione di Hadoop, il cluster Hadoop viene configurato con le impostazioni di configurazione predefinite.
È molto importante che gli amministratori di Hadoop conoscano le diverse specifiche hardware come la capacità della RAM, il numero di dischi montati sui DataNode, il numero di core della CPU, il numero di core fisici o virtuali, le schede NIC, ecc.
Pertanto, non esiste un'unica tecnica di ottimizzazione delle prestazioni che si adatti a tutti i lavori Hadoop perché è molto difficile ottenere un equilibrio tra tutte le risorse mentre si risolve il problema dei big data.
Possiamo scegliere i suggerimenti e i trucchi per l'ottimizzazione delle prestazioni in base alla quantità di dati da spostare e al tipo di lavoro Hadoop da eseguire in produzione. L'ottimizzazione delle prestazioni migliore e più efficace aiuta a raggiungere le massime prestazioni.
Per eseguire lo stesso, dobbiamo ripetere il processo indicato di seguito fino a ottenere l'output desiderato in modo ottimale.
Esegui lavoro –> Identifica collo di bottiglia –> Indirizza collo di bottiglia.
Quindi, in pratica, per l'ottimizzazione delle prestazioni, dobbiamo prima eseguire il lavoro Hadoop MapReduce, identificare il collo di bottiglia e quindi risolvere il problema utilizzando i metodi seguenti. Dobbiamo ripetere il passaggio precedente fino a raggiungere il livello di prestazioni desiderato.
Suggerimenti e trucchi per l'ottimizzazione delle prestazioni di MapReduce
I modi utilizzati per l'ottimizzazione delle prestazioni di Hadoop MapReduce possono essere classificati in due categorie. Queste due categorie sono:
1. Ottimizzazione delle prestazioni basata sui parametri di runtime Hadoop
2. Ottimizzazione delle prestazioni specifiche dell'applicazione Hadoop
Discutiamo ora di come possiamo migliorare le prestazioni del cluster Hadoop in base a queste due categorie.
1. Ottimizzazione delle prestazioni basata sui parametri di runtime Hadoop
Questa categoria si occupa dell'ottimizzazione dei parametri di runtime di Hadoop come l'ottimizzazione dell'utilizzo della CPU, dell'utilizzo della memoria, dell'utilizzo del disco e dell'utilizzo della rete per l'ottimizzazione delle prestazioni. Le tecniche incluse in questa categoria sono:
a. Regolazione della memoria
Il passaggio più importante per garantire le massime prestazioni di un lavoro Hadoop è ottimizzare i parametri di configurazione per la memoria monitorando l'utilizzo della memoria sul server.
Ogni processo MapReduce in Hadoop raccoglie le informazioni sui vari record di input letti, numero di record di riduzione, numero di record in pipeline per un'ulteriore esecuzione, memoria di scambio, dimensione dell'heap impostata, ecc.
Le attività Hadoop generalmente non sono vincolate dalla CPU. Quindi, la preoccupazione principale è ottimizzare l'utilizzo della memoria e le fuoriuscite del disco.
La migliore regola pratica per l'ottimizzazione della memoria per massimizzare le prestazioni è garantire che i processi MapReduce non attivino lo scambio. Ciò significa utilizzare quanta più memoria possibile senza attivare lo scambio.
Software come Cloudera Manager, Nagios o Gangglia possono essere utilizzati per monitorare l'utilizzo della memoria di scambio.
Ogni volta che c'è un enorme utilizzo della memoria di scambio, l'utilizzo della memoria dovrebbe essere ottimizzato tramite la configurazione di mapred.child.java.opts proprietà riducendo la quantità di RAM assegnata a ciascuna attività in mapred.child.java.opts .
Possiamo regolare la memoria per l'attività impostando mapred.child.java.opts a -Xmx2048M in un mapred-site.xml.
b. Riduci al minimo la fuoriuscita del disco della mappa
Disk IO è il collo di bottiglia delle prestazioni in Apache Hadoop. C'erano molti parametri che possiamo mettere a punto per ridurre al minimo le fuoriuscite. Possiamo regolare i parametri come:
- Compressione dell'output del mappatore
- Assicurati che il mapper utilizzi il 70% della memoria heap per lo spill buffer.
Ma pensi che versamenti frequenti siano davvero una buona idea?
Si consiglia vivamente di non versare più di una volta perché se si rovescia una volta, è necessario rileggere e riscrivere tutti i dati:3 volte l'IO.
c. Ottimizzazione delle attività del mappatore
Possiamo impostare implicitamente il numero di attività della mappa. Il modo più comune ed efficace per l'ottimizzazione delle prestazioni di Hadoop per il mapper è controllare la quantità di mappatori e le dimensioni di ciascun lavoro.
Durante la gestione dei file di grandi dimensioni, il framework divide il file in blocchi più piccoli in modo che il mapper possa eseguirlo in parallelo. Tuttavia, l'inizializzazione di un nuovo lavoro di mappatura richiede solitamente alcuni secondi, che è anche un sovraccarico e deve essere ridotto al minimo. Quindi i suggerimenti per lo stesso sono:
- Riutilizza attività jvm
- Mira alle attività della mappa che durano da 1 a 3 minuti ciascuna. Quindi, se il tempo medio di esecuzione del mappatore è inferiore a un minuto, aumenta il mapred.min.split.size, per allocare meno mappatori nello slot e quindi ridurre il sovraccarico di inizializzazione del mappatore.
- Usa il formato di input Combina file per un sacco di file più piccoli.
2. Ottimizzazione delle prestazioni specifiche dell'applicazione Hadoop
Le tecniche incluse in questa categoria sono:
a. Ridurre al minimo l'output del mappatore
Riducendo al minimo l'output del mapper, possiamo migliorare le prestazioni poiché l'output del mapper è molto sensibile all'IO del disco, all'IO di rete e alla sensibilità della memoria nella fase di shuffle. Possiamo raggiungere questo obiettivo:
- Filtraggio dei record sul lato mappatore anziché sul lato riduttore.
- Utilizzo di dati minimi per formare la chiave e il valore di output del mappatore in MapReduce.
- Compressione dell'output del mappatore
b. Carico riduttore di bilanciamento
Le attività di riduzione sbilanciate creano problemi di prestazioni. Alcuni dei riduttori assorbono la maggior parte dell'output dal mappatore e sono estremamente lunghi rispetto agli altri riduttori. Possiamo bilanciare il carico del riduttore:
- Implementazione di una migliore funzione hash nella classe Partitioner.
- Scrittura di un lavoro di preelaborazione per separare le chiavi utilizzando più output. Quindi usa un altro lavoro di riduzione della mappa per elaborare le chiavi speciali che possono causare il problema.
c. Riduci i dati intermedi con Combiner in Hadoop
Inoltre possiamo ottimizzare le prestazioni del cluster Hadoop scrivendo un combinatore. Combiner riduce la quantità di dati da trasferire dal mapper al riduttore. Ciò si rivela vantaggioso in quanto riduce la congestione della rete.
d. Esecuzione speculativa
Le prestazioni dei lavori MapReduce sono seriamente compromesse quando le attività impiegano più tempo per terminare la loro esecuzione. L'esecuzione speculativa in Hadoop è l'approccio comune per risolvere questo problema eseguendo il backup delle attività lente sulle macchine alternative.
Possiamo abilitare l'esecuzione speculativa impostando i parametri di configurazione 'mapreduce.map.tasks.speculative.execution' e 'mapreduce.reduce.tasks.speculative.execution' al vero. Ciò ridurrà il tempo di esecuzione del lavoro.
Riepilogo
Infine, abbiamo visto che l'ottimizzazione delle prestazioni in Hadoop aiuta a ottimizzare le prestazioni del cluster Hadoop. L'articolo ha spiegato vari suggerimenti e trucchi per l'ottimizzazione delle prestazioni del cluster Hadoop.
L'articolo ha evidenziato alcuni dei trucchi migliori e più efficaci per massimizzare le prestazioni.
Tuttavia, se hai domande su questo argomento, sentiti libero di condividerle con noi nella sezione commenti.