Uso de DistCp para copiar datos entre Azure Storage Blob y Azure Data Lake Storage Gen2Use DistCp to copy data between Azure Storage Blobs and Azure Data Lake Storage Gen2

Puede usar DistCp para copiar datos entre una cuenta de almacenamiento de uso general V2 y una cuenta de almacenamiento de uso general V2 con el espacio de nombres jerárquico habilitado.You can use DistCp to copy data between a general purpose V2 storage account and a general purpose V2 storage account with hierarchical namespace enabled. En este artículo se proporcionan instrucciones sobre cómo usar la herramienta DistCp.This article provides instructions on how use the DistCp tool.

DistCp proporciona una variedad de parámetros de línea de comandos y se recomienda encarecidamente leer este artículo para optimizar el uso de la herramienta.DistCp provides a variety of command-line parameters and we strongly encourage you to read this article in order to optimize your usage of it. En este artículo se explica la funcionalidad básica, al mismo tiempo que se centra en su uso para copiar datos a una cuenta con el espacio de nombres jerárquico habilitado.This article shows basic functionality while focusing on its use for copying data to a hierarchical namespace enabled account.

Requisitos previosPrerequisites

  • Suscripción a Azure.An Azure subscription. Consulte Obtención de una versión de evaluación gratuita.See Get Azure free trial.
  • Una cuenta existente de Azure Storage sin las funcionalidades de Data Lake Storage Gen2 habilitadas, como el espacio de nombres jerárquico.An existing Azure Storage account without Data Lake Storage Gen2 capabilities (hierarchical namespace) enabled.
  • Una cuenta de Azure Storage con las funcionalidades de Data Lake Storage Gen2 habilitadas, como el espacio de nombres jerárquico.An Azure Storage account with Data Lake Storage Gen2 capabilities (hierarchical namespace) enabled. Para obtener instrucciones sobre cómo crearla, vea Creación de una cuenta de Azure Storage.For instructions on how to create one, see Create an Azure Storage account
  • Un contenedor creado en la cuenta de almacenamiento con el espacio de nombres jerárquico habilitado.A container that has been created in the storage account with hierarchical namespace enabled.
  • Un clúster de Azure HDInsight con acceso a una cuenta de almacenamiento con la característica de espacio de nombres jerárquico habilitada.An Azure HDInsight cluster with access to a storage account with the hierarchical namespace feature enabled. Consulte Uso de Data Lake Storage Gen2 con clústeres de Azure HDInsight.See Use Azure Data Lake Storage Gen2 with Azure HDInsight clusters. Asegúrese de habilitar el Escritorio remoto para el clúster.Make sure you enable Remote Desktop for the cluster.

Usar DistCp desde un clúster de HDInsight de LinuxUse DistCp from an HDInsight Linux cluster

Un clúster de HDInsight incluye la utilidad DistCp, que puede utilizarse para copiar datos de orígenes diferentes en un clúster de HDInsight.An HDInsight cluster comes with the DistCp utility, which can be used to copy data from different sources into an HDInsight cluster. Si ha configurado el clúster de HDInsight para usar conjuntamente Azure Blob Storage y Azure Data Lake Storage, la utilidad DistCp puede utilizarse también directamente para copiar datos entre ellos también.If you have configured the HDInsight cluster to use Azure Blob Storage and Azure Data Lake Storage together, the DistCp utility can be used out-of-the-box to copy data between as well. En esta sección veremos cómo usar la utilidad DistCp.In this section, we look at how to use the DistCp utility.

  1. Cree una sesión SSH en el clúster de HDI.Create an SSH session to your HDI cluster. Consulte Conexión a un clúster de HDInsight basado en Linux.See Connect to a Linux-based HDInsight cluster.

  2. Compruebe si puede acceder a la cuenta existente de uso general V2 (sin el espacio de nombres jerárquico habilitado).Verify whether you can access your existing general purpose V2 account (without hierarchical namespace enabled).

    hdfs dfs –ls wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/
    

    La salida debería proporcionar una lista de contenido en el contenedor.The output should provide a list of contents in the container.

  3. De forma similar, compruebe si puede acceder a la cuenta de almacenamiento con el espacio de nombres jerárquico habilitado desde el clúster.Similarly, verify whether you can access the storage account with hierarchical namespace enabled from the cluster. Ejecute el siguiente comando:Run the following command:

    hdfs dfs -ls abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/
    

    La salida debería proporcionar una lista de archivos o carpetas en la cuenta de Data Lake Storage.The output should provide a list of files/folders in the Data Lake storage account.

  4. Utilice DistCp para copiar datos desde WASB a una cuenta de Data Lake Storage.Use DistCp to copy data from WASB to a Data Lake Storage account.

    hadoop distcp wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder
    

    El comando copia el contenido de la carpeta /example/data/gutenberg/ de Blob Storage a /myfolder en la cuenta de Data Lake Storage.The command copies the contents of the /example/data/gutenberg/ folder in Blob storage to /myfolder in the Data Lake Storage account.

  5. Asimismo, utilice DistCp para copiar datos de la cuenta de Data Lake Storage a Blob Storage (WASB).Similarly, use DistCp to copy data from Data Lake Storage account to Blob Storage (WASB).

    hadoop distcp abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg
    

    El comando copia el contenido de /myfolder de la cuenta de Data Lake Store en la carpeta /example/data/gutenberg/ de WASB.The command copies the contents of /myfolder in the Data Lake Store account to /example/data/gutenberg/ folder in WASB.

Consideraciones de rendimiento sobre el uso de DistCpPerformance considerations while using DistCp

Dado que la granularidad más baja de DistCp es un único archivo, configurar el número máximo de copias simultáneas es el parámetro más importante para optimizar con respecto a Data Lake Storage.Because DistCp's lowest granularity is a single file, setting the maximum number of simultaneous copies is the most important parameter to optimize it against Data Lake Storage. El número de copias simultáneas es igual al número de parámetros de asignador (m) en la línea de comandos.Number of simultaneous copies is equal to the number of mappers (m) parameter on the command line. Este parámetro especifica el número máximo de mapeadores que se usan para copiar los datos.This parameter specifies the maximum number of mappers that are used to copy data. El valor predeterminado es 20.Default value is 20.

EjemploExample

hadoop distcp -m 100 wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder

¿Cómo se puede determinar el número de asignadores que se debe usar?How do I determine the number of mappers to use?

A continuación hay algunas instrucciones que puede usar.Here's some guidance that you can use.

  • Paso 1: Determinar la memoria total disponible para la cola de aplicación YARN "predeterminada" : el primer paso consiste en determinar la memoria disponible para la cola de aplicación YARN "predeterminada".Step 1: Determine total memory available to the 'default' YARN app queue - The first step is to determine the memory available to the 'default' YARN app queue. Esta información está disponible en el portal de Ambari asociado con el clúster.This information is available in the Ambari portal associated with the cluster. Vaya a YARN y haga clic en la pestaña de configuración para ver la memoria YARN disponible para la cola de aplicación "predeterminada".Navigate to YARN and view the Configs tab to see the YARN memory available to the 'default' app queue. Se trata de la memoria total disponible para el trabajo DistCp (que es realmente un trabajo de MapReduce).This is the total available memory for your DistCp job (which is actually a MapReduce job).

  • Paso 2: Cálculo del número de mapeadores: el valor de m es igual al cociente de la memoria de YARN total dividido por el tamaño del contenedor de YARN.Step 2: Calculate the number of mappers - The value of m is equal to the quotient of total YARN memory divided by the YARN container size. La información del tamaño de contenedor de YARN está también disponible en el portal del Ambari.The YARN container size information is available in the Ambari portal as well. Vaya a YARN y vea la pestaña Configs (Configuraciones). En esta ventana se muestra el tamaño del contenedor de YARN.Navigate to YARN and view the Configs tab. The YARN container size is displayed in this window. La ecuación para llegar al número de asignadores (m) esThe equation to arrive at the number of mappers (m) is

    m = (número de nodos * memoria YARN para cada nodo) / tamaño del contenedor de YARNm = (number of nodes * YARN memory for each node) / YARN container size

EjemploExample

Supongamos que tiene un clúster 4x D14v2s y que intenta transferir 10 TB de datos desde 10 carpetas diferentes.Let's assume that you have a 4x D14v2s cluster and you are trying to transfer 10 TB of data from 10 different folders. Cada una de las carpetas contiene diferentes cantidades de datos y los tamaños de archivo dentro de cada carpeta son diferentes.Each of the folders contains varying amounts of data and the file sizes within each folder are different.

  • Memoria de YARN total: en el portal de Ambari determinará que la memoria de YARN es de 96 GB para un nodo D14.Total YARN memory: From the Ambari portal you determine that the YARN memory is 96 GB for a D14 node. Por lo tanto, la memoria de YARN total para el clúster de cuatro nodos es:So, total YARN memory for four node cluster is:

    Memoria YARN = 4 * 96 GB = 384 GBYARN memory = 4 * 96GB = 384GB

  • Número de mapeadores: en el portal de Ambari determinará que el tamaño del contenedor de YARN es 3072 MB para un nodo de clúster D14.Number of mappers: From the Ambari portal you determine that the YARN container size is 3,072 MB for a D14 cluster node. Por lo tanto, el número de asignadores es:So, number of mappers is:

    m = (4 nodos * 96 GB) / 3072 MB = 128 mapeadoresm = (4 nodes * 96GB) / 3072MB = 128 mappers

Si otras aplicaciones usan memoria, solo puede elegir usar una parte de la memoria de YARN del clúster para DistCp.If other applications are using memory, then you can choose to only use a portion of your cluster’s YARN memory for DistCp.

Copia de grandes conjuntos de datosCopying large datasets

Cuando el tamaño del conjunto de datos que se va a mover es grande (por ejemplo, >1 TB) o si tiene muchas carpetas diferentes, debe considerar el uso de varios trabajos de DistCp.When the size of the dataset to be moved is large (for example, >1 TB) or if you have many different folders, you should consider using multiple DistCp jobs. Aunque es probable que no haya ganancia de rendimiento, los trabajos se reparten para que si alguno da error, solo sea necesario reiniciar ese trabajo específico en lugar del trabajo entero.There is likely no performance gain, but it spreads out the jobs so that if any job fails, you only need to restart that specific job rather than the entire job.

LimitacionesLimitations

  • DistCp intenta crear a asignadores que tengan un tamaño similar para optimizar el rendimiento.DistCp tries to create mappers that are similar in size to optimize performance. El aumento del número de asignadores no siempre aumenta el rendimiento.Increasing the number of mappers may not always increase performance.

  • DistCp está limitado a solo un asignador por archivo.DistCp is limited to only one mapper per file. Por lo tanto, no debería tener más asignadores que archivos.Therefore, you should not have more mappers than you have files. Como DistCp solo puede asignar a un asignador a un archivo, esto limita la cantidad de simultaneidad que puede usarse para copiar archivos de gran tamaño.Since DistCp can only assign one mapper to a file, this limits the amount of concurrency that can be used to copy large files.

  • Si tiene un número pequeño de archivos grandes, debe dividirlos en fragmentos de archivo de 256 MB para ofrecerle una mayor simultaneidad en potencia.If you have a small number of large files, then you should split them into 256 MB file chunks to give you more potential concurrency.