Compartir a través de


Guía para la optimización del rendimiento para usar PowerShell con Azure Data Lake Storage Gen1

En este artículo se describen las propiedades que puede ajustar para obtener un mejor rendimiento al usar PowerShell para trabajar con Data Lake Storage Gen1.

Nota:

Se recomienda usar el módulo de PowerShell de Azure Az para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para obtener información sobre cómo migrar al módulo Az PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Propiedad Predeterminado Descripción
PerFileThreadCount 10 Este parámetro permite elegir el número de subprocesos paralelos para cargar o descargar cada archivo. Este número representa el número máximo de subprocesos que se pueden asignar por archivo, pero puede obtener menos subprocesos en función de su escenario (por ejemplo, si va a cargar un archivo de 1 KB, obtendrá un subproceso incluso si solicita 20 subprocesos).
ConcurrentFileCount 10 Este parámetro es específicamente para cargar o descargar carpetas. Este parámetro determina el número de archivos simultáneos que se pueden cargar o descargar. Este número representa el número máximo de archivos simultáneos que se pueden cargar o descargar al mismo tiempo, pero puede obtener menos simultaneidad en función de su escenario (por ejemplo, si carga dos archivos, obtendrá dos cargas simultáneas incluso si solicita 15).

Ejemplo:

Este comando descarga archivos de Data Lake Storage Gen1 a la unidad local del usuario mediante 20 subprocesos por archivo y 100 archivos simultáneos.

Export-AzDataLakeStoreItem -AccountName "Data Lake Storage Gen1 account name" `
    -PerFileThreadCount 20 `
	-ConcurrentFileCount 100 `
	-Path /Powershell/100GB `
	-Destination C:\Performance\ `
	-Force `
	-Recurse

Cómo determinar los valores de propiedad

La siguiente pregunta que puede tener es cómo determinar qué valor proporcionar para las propiedades relacionadas con el rendimiento. A continuación hay algunas instrucciones que puede usar.

  • Paso 1: Determine el recuento total de subprocesos: empiece calculando el recuento total de subprocesos que se va a usar. Como guía general, deberías usar seis subprocesos para cada núcleo físico.

    Total thread count = total physical cores * 6

    Ejemplo:

    Suponiendo que ejecuta los comandos de PowerShell desde una máquina virtual D14 que tiene 16 núcleos

    Total thread count = 16 cores * 6 = 96 threads

  • Paso 2: Calcular PerFileThreadCount: calculamos nuestro PerFileThreadCount en función del tamaño de los archivos. En el caso de los archivos menores de 2,5 GB, no es necesario cambiar este parámetro porque el valor predeterminado de 10 es suficiente. Para los archivos de más de 2,5 GB, debe usar 10 subprocesos como base para los primeros 2,5 GB y agregar 1 subproceso para cada aumento adicional de 256 MB en el tamaño de archivo. Si va a copiar una carpeta con una gran variedad de tamaños de archivo, considere la posibilidad de agruparlas en tamaños de archivo similares. Tener tamaños de archivo diferentes puede provocar un rendimiento no óptimo. Si no es posible agrupar tamaños de archivo similares, debe establecer PerFileThreadCount en función del tamaño de archivo más grande.

    PerFileThreadCount = 10 threads for the first 2.5 GB + 1 thread for each additional 256 MB increase in file size

    Ejemplo:

    Suponiendo que tiene 100 archivos que van de 1 GB a 10 GB, usamos los 10 GB como el tamaño de archivo más grande para la ecuación, que sería similar al siguiente.

    PerFileThreadCount = 10 + ((10 GB - 2.5 GB) / 256 MB) = 40 threads

  • Paso 3: Calcular ConcurrentFilecount: use el recuento total de subprocesos y PerFileThreadCount para calcular ConcurrentFileCount en función de la ecuación siguiente:

    Total thread count = PerFileThreadCount * ConcurrentFileCount

    Ejemplo:

    En función de los valores de ejemplo que hemos usado

    96 = 40 * ConcurrentFileCount

    Por lo tanto, ConcurrentFileCount es 2.4, que podemos redondear a 2.

Optimización adicional

Es posible que necesite un ajuste adicional porque hay un intervalo de tamaños de archivo con los que trabajar. El cálculo anterior funciona bien si todos o la mayoría de los archivos son más grandes y están más cerca del intervalo de 10 GB. Si en su lugar, hay muchos tamaños de archivos diferentes con muchos archivos siendo más pequeños, entonces podría reducir PerFileThreadCount. Al reducir PerFileThreadCount, podemos aumentar ConcurrentFileCount. Por lo tanto, si suponemos que la mayoría de nuestros archivos son más pequeños en el intervalo de 5 GB, podemos rehacer nuestro cálculo:

PerFileThreadCount = 10 + ((5 GB - 2.5 GB) / 256 MB) = 20

Por lo tanto, ConcurrentFileCount se convierte en 96/20, que es 4,8, redondeado a 4.

Puede seguir ajustando esta configuración cambiando PerFileThreadCount hacia arriba y hacia abajo en función de la distribución de los tamaños de archivo.

Limitación

  • El número de archivos es menor que ConcurrentFileCount: si el número de archivos que está cargando es menor que el concurrentFileCount que calculó, debe reducir ConcurrentFileCount para que sea igual al número de archivos. Puede usar cualquier subproceso restante para aumentar el valor de PerFileThreadCount.

  • Demasiados subprocesos: si aumenta el número de subprocesos demasiado sin aumentar el tamaño del clúster, corre el riesgo de degradar el rendimiento. Puede haber problemas de contención al realizar un cambio de contexto en la CPU.

  • Simultaneidad insuficiente: si la simultaneidad no es suficiente, el clúster puede ser demasiado pequeño. Puede aumentar el número de nodos del clúster, lo que proporciona más simultaneidad.

  • Errores de limitación: es posible que vea errores de limitación si la simultaneidad es demasiado alta. Si ve errores de limitación de velocidad, debe reducir la simultaneidad o ponerse en contacto con nosotros.

Pasos siguientes