Optimizar Azure Data Lake Storage Gen2 para el rendimientoOptimize Azure Data Lake Storage Gen2 for performance

Azure Data Lake Storage Gen2 permite un alto rendimiento en el movimiento de datos y el análisis de consumo de la entrada y salida.Azure Data Lake Storage Gen2 supports high-throughput for I/O intensive analytics and data movement. En Data Lake Storage Gen2, usar toda la capacidad de proceso disponible (la cantidad de datos que se pueden leer o escribir por segundo) es importante para obtener el mejor rendimiento.In Data Lake Storage Gen2, using all available throughput – the amount of data that can be read or written per second – is important to get the best performance. Se consigue realizando tantas lecturas y escrituras en paralelo como sea posible.This is achieved by performing as many reads and writes in parallel as possible.

Rendimiento de Data Lake Storage Gen2

Data Lake Storage Gen2 puede escalar para ofrecer el rendimiento necesario para todos los escenarios de análisis.Data Lake Storage Gen2 can scale to provide the necessary throughput for all analytics scenarios. De forma predeterminada, una cuenta Data Lake Storage Gen2 proporciona el rendimiento suficiente en su configuración predeterminada para satisfacer las necesidades de una amplia variedad de casos de uso.By default, a Data Lake Storage Gen2 account provides enough throughput in its default configuration to meet the needs of a broad category of use cases. Cuando los clientes llegan al límite predeterminado, la cuenta Data Lake Storage Gen2 se puede configurar para proporcionar más rendimiento, si se ponen en contacto con Soporte técnico de Azure.For the cases where customers run into the default limit, the Data Lake Storage Gen2 account can be configured to provide more throughput by contacting Azure Support.

Ingesta de datosData ingestion

Cuando se ingieren datos de un sistema de origen para Data Lake Storage Gen2, es importante tener en cuenta que el hardware de origen, el hardware de red de origen o la conectividad de red con Data Lake Storage Gen2 pueden constituir un cuello de botella.When ingesting data from a source system to Data Lake Storage Gen2, it is important to consider that the source hardware, source network hardware, or network connectivity to Data Lake Storage Gen2 can be the bottleneck.

Diagrama en el que se muestran los factores que se deben tener en cuenta a la hora de ingerir datos desde un sistema de origen en Data Lake Storage Gen2.

Es importante asegurarse de que el movimiento de datos no se ve afectado por estos factores.It is important to ensure that the data movement is not affected by these factors.

Hardware de origenSource hardware

Si usa máquinas locales o máquinas virtuales en Azure, debe seleccionar cuidadosamente el hardware apropiado.Whether you are using on-premises machines or VMs in Azure, you should carefully select the appropriate hardware. Como hardware del disco de origen, elija SSD antes que HDD y seleccione el hardware de disco con los ejes más rápidos.For Source Disk Hardware, prefer SSDs to HDDs and pick disk hardware with faster spindles. Como hardware de la red de origen, use los NIC más rápidos que sea posible.For Source Network Hardware, use the fastest NICs possible. En Azure, se recomienda que las máquinas virtuales de Azure D14 tengan el hardware de red y de disco con la capacidad apropiada.On Azure, we recommend Azure D14 VMs which have the appropriately powerful disk and networking hardware.

Conectividad de red para Data Lake Storage Gen2Network connectivity to Data Lake Storage Gen2

La conectividad de red entre los datos de origen y Data Lake Storage Gen2 a veces puede constituir un cuello de botella.The network connectivity between your source data and Data Lake Storage Gen2 can sometimes be the bottleneck. Cuando los datos de origen están en local, considere el uso de un vínculo dedicado con Azure ExpressRoute.When your source data is On-Premises, consider using a dedicated link with Azure ExpressRoute. Si los datos de origen están en Azure, el rendimiento será el mejor cuando los datos se encuentren en la misma región de Azure que Data Lake Storage Gen2.If your source data is in Azure, the performance will be best when the data is in the same Azure region as the Data Lake Storage Gen2 account.

Configuración de herramientas de ingesta de datos para lograr una paralelización máximaConfigure data ingestion tools for maximum parallelization

Una vez haya solucionado los cuellos de botella de la conectividad de la red y del hardware de origen, estará listo para configurar las herramientas de ingesta.Once you have addressed the source hardware and network connectivity bottlenecks above, you are ready to configure your ingestion tools. En la tabla siguiente se resume la configuración básica de varias herramientas de ingesta populares y se ofrecen artículos detallados sobre la optimización del rendimiento relacionados con ellas.The following table summarizes the key settings for several popular ingestion tools and provides in-depth performance tuning articles for them. Para más información sobre la herramienta adecuada para su escenario, consulte este artículo.To learn more about which tool to use for your scenario, visit this article.

HerramientaTool ConfiguraciónSettings Más detallesMore Details
DistCpDistCp -m (mapper)-m (mapper) VínculoLink
Azure Data FactoryAzure Data Factory parallelCopiesparallelCopies VínculoLink
SqoopSqoop fs.azure.block.size, -m (mapper)fs.azure.block.size, -m (mapper) VínculoLink

Estructuración del conjunto de datosStructure your data set

Cuando los datos se almacenan en Data Lake Storage Gen2, el tamaño de los archivos, su número y la estructura de carpetas afectan al rendimiento.When data is stored in Data Lake Storage Gen2, the file size, number of files, and folder structure have an impact on performance. En la siguiente sección se describen los procedimientos recomendados en estas áreas.The following section describes best practices in these areas.

Tamaño de archivoFile size

Normalmente, los motores de análisis como HDInsight y Azure Data Lake Analytics tienen una sobrecarga por cada archivo.Typically, analytics engines such as HDInsight and Azure Data Lake Analytics have a per-file overhead. Si los datos se almacenan en muchos archivos pequeños, puede afectar desfavorablemente al rendimiento.If you store your data as many small files, this can negatively affect performance. En general, organice los datos en archivos de un tamaño mayor para mejorar el rendimiento (tamaño de 256 MB a 100 GB).In general, organize your data into larger sized files for better performance (256MB to 100GB in size). Algunos motores y aplicaciones podrían tener problemas para procesar eficazmente los archivos que tienen un tamaño superior a 100 GB.Some engines and applications might have trouble efficiently processing files that are greater than 100GB in size.

A veces, las canalizaciones de datos ejercen un control limitado sobre los datos sin procesar que tienen una gran cantidad de archivos pequeños.Sometimes, data pipelines have limited control over the raw data which has lots of small files. En general, se recomienda que el sistema tenga algún tipo de proceso para agregar archivos pequeños en otros más grandes y que así puedan usarlos aplicaciones de nivel inferior.In general, we recommend that your system have some sort of process to aggregate small files into larger ones for use by downstream applications.

Organización de los datos de serie temporal en carpetasOrganizing time series data in folders

En las cargas de trabajo de Hive, la eliminación de las particiones de los datos de serie temporal puede ayudar a algunas consultas a leer solo un subconjunto de los datos, lo que mejora el rendimiento.For Hive workloads, partition pruning of time-series data can help some queries read only a subset of the data which improves performance.

Aquellas canalizaciones que ingieren datos de serie temporal suelen ubicar sus archivos con una nomenclatura muy estructurada para los archivos y las carpetas.Those pipelines that ingest time-series data, often place their files with a very structured naming for files and folders. A continuación se muestra un ejemplo muy común para los datos estructurados por fecha:Below is a very common example we see for data that is structured by date:

\DataSet\YYYY\MM\DD\datafile_YYYY_MM_DD.tsv\DataSet\YYYY\MM\DD\datafile_YYYY_MM_DD.tsv

Observe que la información de fecha y hora aparece tanto en las carpetas como en el nombre de archivo.Notice that the datetime information appears both as folders and in the filename.

Para la fecha y la hora, el siguiente es un patrón comúnFor date and time, the following is a common pattern

\DataSet\YYYY\MM\DD\HH\mm\datafile_YYYY_MM_DD_HH_mm.tsv\DataSet\YYYY\MM\DD\HH\mm\datafile_YYYY_MM_DD_HH_mm.tsv

De nuevo, su elección de organización de los archivos y carpetas debería ser la que consiga un tamaño de archivo mayor y un número razonable de archivos en cada carpeta.Again, the choice you make with the folder and file organization should optimize for the larger file sizes and a reasonable number of files in each folder.

Optimización de trabajos con muchas operaciones de E/S en las cargas de trabajo de Hadoop y Spark en HDInsightOptimizing I/O intensive jobs on Hadoop and Spark workloads on HDInsight

Los trabajos se dividen en una de las siguientes tres categorías:Jobs fall into one of the following three categories:

  • Gran uso de CPU.CPU intensive. Estos trabajos tienen tiempos de cálculo largos con tiempos de E/S mínimos.These jobs have long computation times with minimal I/O times. Algunos ejemplos son los trabajos de procesamiento del lenguaje natural y el aprendizaje automático.Examples include machine learning and natural language processing jobs.
  • Gran uso de memoria.Memory intensive. Estos trabajos usan una gran cantidad de memoria.These jobs use lots of memory. Algunos ejemplos son los trabajos de análisis en tiempo real y PageRank.Examples include PageRank and real-time analytics jobs.
  • Gran uso de operaciones de E/S.I/O intensive. Estos trabajos dedican la mayor parte de su tiempo a realizar operaciones de E/S.These jobs spend most of their time doing I/O. Un ejemplo común es un trabajo de copia que solo realice operaciones de lectura y escritura.A common example is a copy job which does only read and write operations. Otros ejemplos son los trabajos de preparación de datos que leen una gran cantidad de datos, realizan alguna transformación en ellos y luego los escriben de nuevo en el almacén.Other examples include data preparation jobs that read a lot of data, performs some data transformation, and then writes the data back to the store.

Las siguientes instrucciones solo se pueden aplicar a los trabajos que usan mucho las operaciones de E/S.The following guidance is only applicable to I/O intensive jobs.

Consideraciones generalesGeneral considerations

Puede tener un trabajo que lee o escribe hasta 100 MB en una sola operación, pero almacenar en búfer dicho tamaño puede comprometer el rendimiento.You can have a job that reads or writes as much as 100MB in a single operation, but a buffer of that size might compromise performance. Para optimizar el rendimiento, intente mantener el tamaño de una operación de E/S entre 4 MB y 16 MB.To optimize performance, try to keep the size of an I/O operation between 4MB and 16MB.

Consideraciones generales para un clúster de HDInsightGeneral considerations for an HDInsight cluster

  • Versiones de HDInsight.HDInsight versions. Para obtener el mejor rendimiento, utilice la versión más reciente de HDInsight.For best performance, use the latest release of HDInsight.
  • Regiones.Regions. Coloque la cuenta de Data Lake Storage Gen2 en la misma región que el clúster de HDInsight.Place the Data Lake Storage Gen2 account in the same region as the HDInsight cluster.

Un clúster de HDInsight se compone de dos nodos principales y algunos nodos de trabajo.An HDInsight cluster is composed of two head nodes and some worker nodes. Cada nodo de trabajo proporciona una cantidad específica de núcleos y de memoria, lo que se determina según el tipo de máquina virtual.Each worker node provides a specific number of cores and memory, which is determined by the VM-type. Cuando se ejecuta un trabajo, YARN es el negociador de recursos que asigna la memoria disponible y los núcleos para crear los contenedores.When running a job, YARN is the resource negotiator that allocates the available memory and cores to create containers. Cada contenedor ejecuta las tareas necesarias para completar el trabajo.Each container runs the tasks needed to complete the job. Los contenedores se ejecutan en paralelo para procesar las tareas rápidamente.Containers run in parallel to process tasks quickly. Por lo tanto, el rendimiento se mejora ejecutando tantos contenedores en paralelo como sea posible.Therefore, performance is improved by running as many parallel containers as possible.

Hay tres niveles dentro de un clúster de HDInsight que se pueden optimizar para aumentar el número de contenedores y usar toda la capacidad de proceso disponible.There are three layers within an HDInsight cluster that can be tuned to increase the number of containers and use all available throughput.

  • Nivel físicoPhysical layer
  • Nivel de YARNYARN layer
  • Nivel de carga de trabajoWorkload layer

Nivel físicoPhysical Layer

Ejecute el clúster con más nodos o máquinas virtuales de un tamaño mayor.Run cluster with more nodes and/or larger sized VMs. Un clúster mayor le permitirá ejecutar más contenedores de YARN, tal como se muestra en la ilustración siguiente.A larger cluster will enable you to run more YARN containers as shown in the picture below.

Diagrama en el que se muestra cómo un clúster mayor le permitirá ejecutar más contenedores de YARN.

Use máquinas virtuales con más ancho de banda de red.Use VMs with more network bandwidth. La cantidad de ancho de banda de red puede ser un cuello de botella, si hay menos de lo que necesita la capacidad de proceso de Data Lake Storage Gen2.The amount of network bandwidth can be a bottleneck if there is less network bandwidth than Data Lake Storage Gen2 throughput. Diferentes máquinas virtuales tendrán varios tamaños de ancho de banda de red.Different VMs will have varying network bandwidth sizes. Elija un tipo de máquina virtual que tenga el mayor ancho de banda de red posible.Choose a VM-type that has the largest possible network bandwidth.

Nivel de YARNYARN Layer

Use contenedores de YARN menores.Use smaller YARN containers. Reduzca el tamaño de cada contenedor de YARN para crear más contenedores con la misma cantidad de recursos.Reduce the size of each YARN container to create more containers with the same amount of resources.

Diagrama en el que se muestra el resultado al reducir el tamaño de cada contenedor de YARN para crear más contenedores.

En función de la carga de trabajo, siempre habrá un tamaño de contenedor de YARN mínimo que se necesite.Depending on your workload, there will always be a minimum YARN container size that is needed. Si elige un contenedor demasiado pequeño, los trabajos no tendrán memoria suficiente.If you pick too small a container, your jobs will run into out-of-memory issues. Normalmente, los contenedores de YARN no deben ser menores de 1 GB.Typically YARN containers should be no smaller than 1GB. Es habitual ver contenedores de YARN de 3 GB.It's common to see 3GB YARN containers. Para algunas cargas de trabajo, puede que necesite contenedores de YARN mayores.For some workloads, you may need larger YARN containers.

Aumente los núcleos para cada contenedor de YARN.Increase cores per YARN container. Aumente el número de núcleos asignados a cada contenedor para incrementar las tareas en paralelo que se ejecutan en cada uno.Increase the number of cores allocated to each container to increase the number of parallel tasks that run in each container. Funciona en las aplicaciones como Spark que ejecutan varias tareas por contenedor.This works for applications like Spark which run multiple tasks per container. En las aplicaciones como Hive que ejecutan un único subproceso en cada contenedor, es mejor tener varios contenedores en lugar de más núcleos por contenedor.For applications like Hive which run a single thread in each container, it is better to have more containers rather than more cores per container.

Nivel de carga de trabajoWorkload Layer

Use todos los contenedores disponibles.Use all available containers. Establezca el número de tareas para que sea igual o mayor que el número de contenedores disponibles de modo que se usen todos los recursos.Set the number of tasks to be equal or larger than the number of available containers so that all resources are utilized.

Diagrama en el que se muestra el uso de todos los contenedores.

Los errores de las tareas son costosos.Failed tasks are costly. Si cada tarea tiene una gran cantidad de datos que se van a procesar, el error de una tarea provoca un reintento que resulta caro.If each task has a large amount of data to process, then failure of a task results in an expensive retry. Por lo tanto, es mejor que cree más tareas y que cada una procese una pequeña cantidad de datos.Therefore, it is better to create more tasks, each of which processes a small amount of data.

Además de las directrices generales anteriores, cada aplicación tiene diferentes parámetros disponibles que pueden optimizarse para ella en concreto.In addition to the general guidelines above, each application has different parameters available to tune for that specific application. En la tabla siguiente se enumeran algunos de los parámetros y los vínculos para empezar a optimizar el rendimiento de cada aplicación.The table below lists some of the parameters and links to get started with performance tuning for each application.

Carga de trabajoWorkload Parámetro para establecer tareasParameter to set tasks
Spark en HDInsightSpark on HDInsight
  • Num-executorsNum-executors
  • Memoria del ejecutorExecutor-memory
  • Executor-coresExecutor-cores
Hive en HDInsightHive on HDInsight
  • hive.tez.container.sizehive.tez.container.size
MapReduce en HDInsightMapReduce on HDInsight
  • Mapreduce.map.memoryMapreduce.map.memory
  • Mapreduce.job.mapsMapreduce.job.maps
  • Mapreduce.reduce.memoryMapreduce.reduce.memory
  • Mapreduce.job.reducesMapreduce.job.reduces
Storm en HDInsightStorm on HDInsight
  • Número de procesos de trabajoNumber of worker processes
  • Número de instancias de ejecutor de spoutNumber of spout executor instances
  • Número de instancias de ejecutor de boltNumber of bolt executor instances
  • Número de tareas de spoutNumber of spout tasks
  • Número de tareas de boltNumber of bolt tasks

Consulte tambiénSee also