Guía para la optimización del rendimiento de Hive en HDInsight y Azure Data Lake Storage Gen1

La configuración predeterminada se ha establecido para proporcionar un buen rendimiento en muchos casos de uso diferentes. Para las consultas de uso intensivo de E/S, Hive se puede optimizar para obtener un mejor rendimiento con Azure Data Lake Storage Gen1.

Requisitos previos

Parámetros

Estos son los parámetros de configuración más importantes que se deben ajustar para mejorar el rendimiento de Data Lake Storage Gen1:

  • hive.tez.container.size: la cantidad de memoria usada en cada tarea.

  • tez.grouping.min-size: tamaño mínimo de cada asignador.

  • tez.grouping.min-size: tamaño mínimo de cada asignador.

  • hive.exec.reducer.bytes.per.reducer: tamaño de cada reductor.

hive.tez.container.size: el tamaño del contenedor determina cuánta memoria está disponible para cada tarea. Esta es la entrada principal para controlar la simultaneidad en Hive.

tez.grouping.min-size: este parámetro permite establecer el tamaño mínimo de cada asignador. Si el número de asignadores que Tez elige es inferior al valor de este parámetro, Tez usará el valor establecido aquí.

tez.grouping.max-size: el parámetro le permite establecer el tamaño máximo de cada asignador. Si el número de asignadores que elige Tez es superior al valor de este parámetro, Tez usará entonces el valor establecido aquí.

hive.exec.reducer.bytes.per.reducer: este parámetro establece el tamaño de cada reductor. De forma predeterminada, cada reductor tiene 256 MB.

Guía

Set hive.exec.reducer.bytes.per.reducer: el valor predeterminado funciona bien cuando los datos están descomprimidos. En el caso de los datos que están comprimidos, debe reducir el tamaño del reductor.

Set hive.tez.container.size: en cada nodo, la memoria se especifica mediante yarn.nodemanager.resource.memory-mb y se debe establecer correctamente en el clúster de HDI de forma predeterminada. Para más información sobre la configuración de la memoria adecuada en YARN, consulte esta entrada.

Las cargas de trabajo que hacen un uso intensivo de E/S pueden beneficiarse de un mayor paralelismo disminuyendo el tamaño del contenedor de Tez. Con ello el usuario tiene más contenedores, lo que aumenta la simultaneidad. Sin embargo, algunas consultas de Hive requieren una cantidad significativa de memoria (p. ej. MapJoin). Si la tarea no tiene suficiente memoria, obtendrá una excepción de memoria insuficiente durante el tiempo de ejecución. Si recibe excepciones de memoria insuficiente, debe aumentar la memoria.

El número de tareas simultáneas en ejecución o con paralelismo estará enlazado por la cantidad total de memoria YARN. El número de contenedores YARN determina cuántas tareas simultáneas se pueden ejecutar. Para buscar la memoria YARN por nodo, puede ir a Ambari. Vaya a YARN y vea la pestaña Configs (Configuraciones). En esta ventana se muestra el tamaño de la memoria de YARN.

Total de memoria de YARN = nodos * memoria de YARN por nodo Número de contenedores de YARN = total de memoria de YARN/tamaño de contenedor de Tez

La clave para mejorar el rendimiento mediante Data Lake Storage Gen1 es aumentar la simultaneidad tanto como sea posible. Tez calcula automáticamente el número de tareas que se deben crear por lo que no es necesario establecerlo.

Cálculo de ejemplo

Supongamos que tiene un clúster D14 de 8 nodos.

Total de memoria de YARN = nodos * memoria de YARN por nodo Cantidad total de memoria de YARN= 8 nodos * 96 GB = 768 GB Número de contenedores de YARN = 768 GB/3072 MB = 256

Limitaciones

Límite de Data Lake Storage Gen1

Si se alcanzan los límites de ancho de banda proporcionados por Data Lake Storage Gen1, es posible que experimente errores en las tareas. Esto puede identificarse observando los errores de limitación en los registros de tarea. Puede reducir el paralelismo mediante un aumento del tamaño del contenedor de Tez. Si necesita más simultaneidad para su trabajo, póngase en contacto con nosotros.

Para comprobar si le están aplicando limitaciones, debe habilitar el registro de depuración en el lado del cliente. Así es cómo debe hacerlo:

  1. Coloque la siguiente propiedad en las propiedades de log4j en la configuración de Hive. Puede hacerlo desde la vista de Ambari: log4j.logger.com.microsoft.azure.datalake.store=DEBUG. Reinicie todos los nodos/servicios para que la configuración surta efecto.

  2. Si se le están aplicando límites, verá el código de error HTTP 429 en el archivo de registro de Hive. El archivo de registro de Hive se encuentra en /tmp/<user>/hive.log

Información adicional sobre la optimización de Hive

Estos son algunos blogs que le ayudará a optimizar las consultas de Hive: