Materiale sussidiario per l'ottimizzazione delle prestazioni di Hive in HDInsight e Azure Data Lake Storage Gen1
Le impostazioni predefinite sono state impostate per fornire buone prestazioni per molti casi d'uso diversi. Per le query con attività di I/O intensive, è possibile regolare Hive per ottenere prestazioni migliori con Azure Data Lake Storage Gen1.
Prerequisiti
- Una sottoscrizione di Azure. Vedere Ottenere una versione di prova gratuita di Azure.
- Un account Data Lake Storage Gen1. Per istruzioni su come crearne una, vedere Introduzione a Azure Data Lake Storage Gen1
- Cluster HDInsight di Azure con accesso a un account Data Lake Storage Gen1. Vedere Creare un cluster HDInsight con Data Lake Storage Gen1. Assicurarsi di abilitare il Desktop remoto per il cluster.
- Esecuzione di Hive in HDInsight. Per informazioni sull'esecuzione di processi Hive in HDInsight, vedere Usare Hive in HDInsight
- Linee guida per l'ottimizzazione delle prestazioni in Data Lake Storage Gen1. Per i concetti generali sulle prestazioni, vedere linee guida per l'ottimizzazione delle prestazioni Data Lake Storage Gen1
Parametri
Di seguito sono elencate le impostazioni più importanti da ottimizzare per ottenere prestazioni migliori in Data Lake Storage Gen1:
hive.tez.container.size: la quantità di memoria usata da ciascuna attività
tez.grouping.min-size: la dimensione minima di ciascun mapper
tez.grouping.max-size: la dimensione massima di ciascun mapper
hive.exec.reducer.bytes.per.reducer: la dimensione di ciascun riduttore
hive.tez.container.size: la dimensione del contenitore determina la quantità di memoria disponibile per ciascuna attività. Questo è l'input principale per il controllo di concorrenza in Hive.
tez.grouping.min-size: questo parametro consente di impostare la dimensione minima di ciascun mapper. Se il numero di mapper scelti da Tez è inferiore al valore di questo parametro, Tez userà il valore impostato qui.
tez.grouping.max-size: questo parametro consente di impostare la dimensione massima di ciascun mapper. Se il numero di mapper scelti da Tez è superiore al valore di questo parametro, Tez userà il valore impostato qui.
hive.exec.reducer.bytes.per.reducer: questo parametro consente di impostare la dimensione di ciascun riduttore. Per impostazione predefinita, ogni riduttore ha una dimensione di 256 MB.
Indicazioni
Set hive.exec.reducer.bytes.per.reducer: il valore predefinito funziona bene quando i dati non sono compressi. In caso di dati compressi, è consigliabile ridurre la dimensione del riduttore.
Set hive.tez.container.size: in ciascun nodo, la memoria viene specificata da yarn.nodemanager.resource.memory-mb e dovrebbe essere impostata correttamente nel cluster HDI per impostazione predefinita. Per altre informazioni sull'impostazione della memoria appropriata in YARN, vedere questo post.
I carichi di lavoro con numerose operazioni di I/O possono trarre vantaggi da un maggiore parallelismo riducendo la dimensione del contenitore Tez. In questo modo l'utente dispone di più contenitori e, quindi, di più concorrenza. Tuttavia, alcune query di Hive richiedono una notevole quantità di memoria (ad esempio MapJoin). Se l'attività non dispone di sufficiente memoria, si otterrà un'eccezione di memoria insufficiente durante la fase di runtime. Se si ricevono eccezioni di memoria insufficiente, è necessario aumentare la memoria.
Il numero di attività simultanee in esecuzione o il parallelismo verrà ristretto dalla memoria totale di YARN. Il numero di contenitori YARN determinerà il numero di attività che è possibile eseguire contemporaneamente. Per trovare la memoria YARN per ogni nodo è possibile passare ad Ambari. Passare a YARN e visualizzare la scheda Configurazioni. La memoria YARN viene visualizzata in questa finestra.
Memoria TOTALE YARN = nodi * Memoria YARN per nodo Numero di contenitori YARN = Totale memoria YARN / Dimensioni del contenitore Tez
La chiave per migliorare le prestazioni usando Data Lake Storage Gen1 consiste nell'aumentare il più possibile la concorrenza. Tez calcola automaticamente il numero di attività da creare, in modo che non debba essere impostato manualmente.
Calcolo di esempio
Si supponga di disporre di un cluster D14 a 8 nodi.
Memoria YARN totale = nodi * memoria YARN per nodo Memoria totale YARN = 8 nodi * 96 GB = 768 GB Numero di contenitori YARN = 768 GB / 3072 MB = 256
Limitazioni
Limitazione della larghezza di banda della rete di Data Lake Storage Gen1
Se si raggiungono i limiti di larghezza di banda di Data Lake Storage Gen1, è possibile che le attività abbiano esito negativo. Ciò può essere constatato verificando la presenza di errori di limitazione nei log delle attività. È possibile ridurre il parallelismo aumentando la dimensione del contenitore Tez. Se occorre maggiore concorrenza per il processo, contattare Microsoft.
Per verificare la presenza di limitazioni, è necessario abilitare la registrazione di debug sul lato client. Ecco come fare:
Inserire la proprietà seguente nelle proprietà log4j nella configurazione Hive. Questa operazione può essere eseguita dalla visualizzazione Ambari: log4j.logger.com.microsoft.azure.datalake.store=DEBUG Riavviare tutti i nodi/servizio per l'effetto della configurazione.
In caso di limitazioni, verrà visualizzato il codice di errore HTTP 429 nel file di log di Hive. Il file di log di Hive si trova nel percorso /tmp/<user>/hive.log
Ulteriori informazioni sull'ottimizzazione di Hive
Ecco alcuni articoli di blog che consentiranno di ottimizzare le query di Hive:
- Ottimizzare le query Hive per Hadoop in HDInsight
- Codifica del file di query Hive in Azure HDInsight
- Discussione Ignite sull'ottimizzazione di Hive in HDInsight