Ajustar rendimiento: Hive, HDInsight y Azure Data Lake Storage Gen2Tune performance: Hive, HDInsight & Azure Data Lake Storage Gen2

La configuración predeterminada se ha establecido para proporcionar un buen rendimiento en muchos casos de uso diferentes.The default settings have been set to provide good performance across many different use cases. Para las consultas de uso intensivo de E/S, Hive se puede optimizar para obtener un mejor rendimiento con Azure Data Lake Storage Gen2.For I/O intensive queries, Hive can be tuned to get better performance with Azure Data Lake Storage Gen2.

Requisitos previosPrerequisites

ParámetrosParameters

Estos son los parámetros de configuración más importantes que se deben ajustar para mejorar el rendimiento de Data Lake Storage Gen2:Here are the most important settings to tune for improved Data Lake Storage Gen2 performance:

  • hive.tez.container.size: la cantidad de memoria usada en cada tarea.hive.tez.container.size – the amount of memory used by each tasks

  • tez.grouping.min-size: tamaño mínimo de cada asignador.tez.grouping.min-size – minimum size of each mapper

  • tez.grouping.min-size: tamaño mínimo de cada asignador.tez.grouping.max-size – maximum size of each mapper

  • hive.exec.reducer.bytes.per.reducer: tamaño de cada reductor.hive.exec.reducer.bytes.per.reducer – size of each reducer

hive.tez.container.size: el tamaño del contenedor determina cuánta memoria está disponible para cada tarea.hive.tez.container.size - The container size determines how much memory is available for each task. Esta es la entrada principal para controlar la simultaneidad en Hive.This is the main input for controlling the concurrency in Hive.

tez.grouping.min-size: este parámetro permite establecer el tamaño mínimo de cada asignador.tez.grouping.min-size – This parameter allows you to set the minimum size of each mapper. Si el número de asignadores que Tez elige es inferior al valor de este parámetro, Tez usará el valor establecido aquí.If the number of mappers that Tez chooses is smaller than the value of this parameter, then Tez will use the value set here.

tez.grouping.max-size: el parámetro le permite establecer el tamaño máximo de cada asignador.tez.grouping.max-size – The parameter allows you to set the maximum size of each mapper. Si el número de asignadores que elige Tez es superior al valor de este parámetro, Tez usará entonces el valor establecido aquí.If the number of mappers that Tez chooses is larger than the value of this parameter, then Tez will use the value set here.

hive.exec.reducer.bytes.per.reducer: este parámetro establece el tamaño de cada reductor.hive.exec.reducer.bytes.per.reducer – This parameter sets the size of each reducer. De forma predeterminada, cada reductor tiene 256 MB.By default, each reducer is 256MB.

GuíaGuidance

Set hive.exec.reducer.bytes.per.reducer: el valor predeterminado funciona bien cuando los datos están descomprimidos.Set hive.exec.reducer.bytes.per.reducer – The default value works well when the data is uncompressed. En el caso de los datos que están comprimidos, debe reducir el tamaño del reductor.For data that is compressed, you should reduce the size of the reducer.

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.Set hive.tez.container.size – In each node, memory is specified by yarn.nodemanager.resource.memory-mb and should be correctly set on HDI cluster by default. Para más información sobre la configuración de la memoria adecuada en YARN, consulte esta entrada.For additional information on setting the appropriate memory in YARN, see this post.

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.I/O intensive workloads can benefit from more parallelism by decreasing the Tez container size. Con ello el usuario tiene más contenedores, lo que aumenta la simultaneidad.This gives the user more containers which increases concurrency. Sin embargo, algunas consultas de Hive requieren una cantidad significativa de memoria (p. ej. MapJoin).However, some Hive queries require a significant amount of memory (e.g. MapJoin). Si la tarea no tiene suficiente memoria, obtendrá una excepción de memoria insuficiente durante el tiempo de ejecución.If the task does not have enough memory, you will get an out of memory exception during runtime. Si recibe excepciones de memoria insuficiente, debe aumentar la memoria.If you receive out of memory exceptions, then you should increase the memory.

El número de tareas simultáneas en ejecución o con paralelismo estará enlazado por la cantidad total de memoria YARN.The concurrent number of tasks running or parallelism will be bounded by the total YARN memory. El número de contenedores YARN determina cuántas tareas simultáneas se pueden ejecutar.The number of YARN containers will dictate how many concurrent tasks can run. Para buscar la memoria YARN por nodo, puede ir a Ambari.To find the YARN memory per node, you can go to Ambari. Vaya a YARN y vea la pestaña Configs (Configuraciones). En esta ventana se muestra el tamaño de la memoria de YARN.Navigate to YARN and view the Configs tab. The YARN memory is displayed in this window.

  • Memoria total de YARN = nodos * memoria de YARN por nodoTotal YARN memory = nodes * YARN memory per node
  • # de contenedores de YARN = memoria total de YARN/tamaño del contenedor de Tez# of YARN containers = Total YARN memory / Tez container size

La clave para mejorar el rendimiento mediante Data Lake Storage Gen2 es aumentar la simultaneidad tanto como sea posible.The key to improving performance using Data Lake Storage Gen2 is to increase the concurrency as much as possible. Tez calcula automáticamente el número de tareas que se deben crear por lo que no es necesario establecerlo.Tez automatically calculates the number of tasks that should be created so you do not need to set it.

Cálculo de ejemploExample calculation

Supongamos que tiene un clúster D14 de 8 nodos.Let's say you have an 8 node D14 cluster.

  • Memoria total de YARN = nodos * memoria de YARN por nodoTotal YARN memory = nodes * YARN memory per node
  • Memoria total de YARN = 8 nodos * 96 GB = 768 GBTotal YARN memory = 8 nodes * 96GB = 768GB
  • # de contenedores de YARN = 768 GB/3072 MB = 256# of YARN containers = 768GB / 3072MB = 256

Información adicional sobre la optimización de HiveFurther information on Hive tuning

Estos son algunos blogs que le ayudará a optimizar las consultas de Hive:Here are a few blogs that will help tune your Hive queries: