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

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:

  1. 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.

  2. 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: