Migración de un almacén HDFS local a Azure Storage con Azure Data BoxMigrate from on-prem HDFS store to Azure Storage with Azure Data Box

Puede migrar datos de un almacén HDFS local de su clúster de Hadoop a Azure Storage (Blob Storage o Data Lake Storage Gen2) mediante un dispositivo Data Box.You can migrate data from an on-premises HDFS store of your Hadoop cluster into Azure Storage (blob storage or Data Lake Storage Gen2) by using a Data Box device. Dispone de dos opciones en Data Box Disk: Data Box de 80 TB de datos o Data Box Heavy de 770 TB.You can choose from Data Box Disk, an 80-TB Data Box or a 770-TB Data Box Heavy.

En este artículo le ayudamos a completar estas tareas:This article helps you complete these tasks:

  • Prepararse para migrar los datos.Prepare to migrate your data.
  • Copie los datos en un dispositivo Azure Data Box Disk, Data Box o Data Box Heavy.Copy your data to a Data Box Disk, Data Box or a Data Box Heavy device.
  • Devolver el dispositivo a Microsoft.Ship the device back to Microsoft.
  • Aplicar permisos de acceso a archivos y directorios (solo Data Lake Storage Gen2)Apply access permissions to files and directories (Data Lake Storage Gen2 only)

PrerrequisitosPrerequisites

Necesita lo siguiente para completar la migración.You need these things to complete the migration.

Si ya está listo, empecemos.If you are ready, let's start.

Copia de los datos a un dispositivo Data BoxCopy your data to a Data Box device

Si los datos caben en un solo dispositivo Data Box, cópielos en el dispositivo.If your data fits into a single Data Box device, then you'll copy the data to the Data Box device.

Si el tamaño de los datos supera la capacidad del dispositivo Data Box, use el procedimiento opcional para dividir los datos entre varios dispositivos Data Box y, luego, realice este paso.If your data size exceeds the capacity of the Data Box device, then use the optional procedure to split the data across multiple Data Box devices and then perform this step.

Para copiar los datos del almacén HDFS local a un dispositivo Data Box, deberá configurar algunas cosas y, después, usar la herramienta DistCp.To copy the data from your on-premises HDFS store to a Data Box device, you'll set a few things up, and then use the DistCp tool.

Siga estos pasos para copiar los datos mediante las API REST de Blob Storage o del almacenamiento de objetos en el dispositivo Data Box.Follow these steps to copy data via the REST APIs of Blob/Object storage to your Data Box device. La interfaz de la API REST hará que el dispositivo aparezca como un almacén HDFS para el clúster.The REST API interface will make the device appear as an HDFS store to your cluster.

  1. Antes de copiar los datos a través de REST, identifique las primitivas de seguridad y de conexión para conectarse a la interfaz de REST en la instancia de Data Box o Data Box Heavy.Before you copy the data via REST, identify the security and connection primitives to connect to the REST interface on the Data Box or Data Box Heavy. Inicie sesión en la interfaz de usuario web local de Data Box y vaya a la página Conectar y copiar.Sign in to the local web UI of Data Box and go to Connect and copy page. En la cuenta de Azure Storage para su dispositivo, en Configuración de acceso, busque REST y selecciónelo.Against the Azure storage account for your device, under Access settings, locate, and select REST.

    Página Conectar y copiar

  2. En el cuadro de diálogo Acceder a la cuenta de almacenamiento y cargar datos, copie el valor de Punto de conexión de Blob service y la Clave de cuenta de almacenamiento.In the Access storage account and upload data dialog, copy the Blob service endpoint and the Storage account key. En el punto de conexión de Blob service, omita el https:// y la barra diagonal final.From the blob service endpoint, omit the https:// and the trailing slash.

    En este caso, el punto de conexión es https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/.In this case, the endpoint is: https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/. La parte del host del URI que va a usar es mystorageaccount.blob.mydataboxno.microsoftdatabox.com.The host portion of the URI that you'll use is: mystorageaccount.blob.mydataboxno.microsoftdatabox.com. Para obtener un ejemplo, vea cómo conectarse con REST a través de http.For an example, see how to Connect to REST over http.

    Cuadro de diálogo Acceder a la cuenta de almacenamiento y cargar datos

  3. Agregue el punto de conexión y la dirección IP del nodo de Data Box o Data Box Heavy a /etc/hosts en cada nodo.Add the endpoint and the Data Box or Data Box Heavy node IP address to /etc/hosts on each node.

    10.128.5.42  mystorageaccount.blob.mydataboxno.microsoftdatabox.com
    

    Si usa otro mecanismo para DNS, debe asegurarse de que el punto de conexión de Data Box se pueda resolver.If you are using some other mechanism for DNS, you should ensure that the Data Box endpoint can be resolved.

  4. Establezca la variable azjars del shell en la ubicación de los archivos jar hadoop-azure y azure-storage.Set the shell variable azjars to the location of the hadoop-azure and azure-storage jar files. Encontrará estos archivos en el directorio de instalación de Hadoop.You can find these files under the Hadoop installation directory.

    Para determinar si existen estos archivos, use el siguiente comando: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure.To determine if these files exist, use the following command: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure. Reemplace el marcador de posición <hadoop_install_dir> por la ruta de acceso al directorio en el que ha instalado Hadoop.Replace the <hadoop_install_dir> placeholder with the path to the directory where you've installed Hadoop. Asegúrese de usar rutas de acceso completas.Be sure to use fully qualified paths.

    Ejemplos:Examples:

    azjars=$hadoop_install_dir/share/hadoop/tools/lib/hadoop-azure-2.6.0-cdh5.14.0.jar azjars=$azjars,$hadoop_install_dir/share/hadoop/tools/lib/microsoft-windowsazure-storage-sdk-0.6.0.jarazjars=$hadoop_install_dir/share/hadoop/tools/lib/hadoop-azure-2.6.0-cdh5.14.0.jar azjars=$azjars,$hadoop_install_dir/share/hadoop/tools/lib/microsoft-windowsazure-storage-sdk-0.6.0.jar

  5. Cree el contenedor de almacenamiento que quiere usar para la copia de los datos.Create the storage container that you want to use for data copy. También debe especificar un directorio de destino como parte de este comando.You should also specify a destination directory as part of this command. En este momento, podría ser un directorio de destino ficticio.This could be a dummy destination directory at this point.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -mkdir -p  wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Reemplace el marcador de posición <blob_service_endpoint> por el nombre del punto de conexión de Blob service.Replace the <blob_service_endpoint> placeholder with the name of your blob service endpoint.

    • Reemplace el marcador de posición <account_key> por la clave de acceso de la cuenta.Replace the <account_key> placeholder with the access key of your account.

    • Reemplace el marcador de posición <container-name> por el nombre del contenedor.Replace the <container-name> placeholder with the name of your container.

    • Reemplace el marcador de posición <destination_directory> por el nombre del directorio en el que quiere copiar los datos.Replace the <destination_directory> placeholder with the name of the directory that you want to copy your data to.

  6. Ejecute un comando de lista para asegurarse de que se han creado el contenedor y el directorio.Run a list command to ensure that your container and directory were created.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -ls -R  wasb://<container_name>@<blob_service_endpoint>/
    
    • Reemplace el marcador de posición <blob_service_endpoint> por el nombre del punto de conexión de Blob service.Replace the <blob_service_endpoint> placeholder with the name of your blob service endpoint.

    • Reemplace el marcador de posición <account_key> por la clave de acceso de la cuenta.Replace the <account_key> placeholder with the access key of your account.

    • Reemplace el marcador de posición <container-name> por el nombre del contenedor.Replace the <container-name> placeholder with the name of your container.

  7. Copie los datos de HDFS de Hadoop a Blob Storage de Data Box, en el contenedor que creó anteriormente.Copy data from the Hadoop HDFS to Data Box Blob storage, into the container that you created earlier. Si no se encuentra el directorio en el que se va a copiar, el comando lo crea automáticamente.If the directory that you are copying into is not found, the command automatically creates it.

    hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint<>=<account_key> \
    -filters <exclusion_filelist_file> \
    [-f filelist_file | /<source_directory> \
           wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Reemplace el marcador de posición <blob_service_endpoint> por el nombre del punto de conexión de Blob service.Replace the <blob_service_endpoint> placeholder with the name of your blob service endpoint.

    • Reemplace el marcador de posición <account_key> por la clave de acceso de la cuenta.Replace the <account_key> placeholder with the access key of your account.

    • Reemplace el marcador de posición <container-name> por el nombre del contenedor.Replace the <container-name> placeholder with the name of your container.

    • Reemplace el marcador de posición <exlusion_filelist_file> por el nombre del archivo que contiene la lista de exclusiones de archivos.Replace the <exlusion_filelist_file> placeholder with the name of the file that contains your list of file exclusions.

    • Reemplace el marcador de posición <source_directory> por el nombre del directorio que contiene los datos que quiere copiar.Replace the <source_directory> placeholder with the name of the directory that contains the data that you want to copy.

    • Reemplace el marcador de posición <destination_directory> por el nombre del directorio en el que quiere copiar los datos.Replace the <destination_directory> placeholder with the name of the directory that you want to copy your data to.

    La opción -libjars se usa para hacer que el archivo hadoop-azure*.jar y el archivo dependiente azure-storage*.jar estén disponibles para distcp.The -libjars option is used to make the hadoop-azure*.jar and the dependent azure-storage*.jar files available to distcp. Esto ya podría ocurrir para algunos clústeres.This may already occur for some clusters.

    En el ejemplo siguiente se muestra cómo se usa el comando distcp para copiar datos.The following example shows how the distcp command is used to copy data.

     hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.mystorageaccount.blob.mydataboxno.microsoftdatabox.com=myaccountkey \
    -filter ./exclusions.lst -f /tmp/copylist1 -m 4 \
    /data/testfiles \
    wasb://hdfscontainer@mystorageaccount.blob.mydataboxno.microsoftdatabox.com/data
    

    Para mejorar la velocidad de copia:To improve the copy speed:

    • Pruebe a cambiar el número de asignadores.Try changing the number of mappers. (En el ejemplo anterior se usan m = 4 asignadores).(The above example uses m = 4 mappers.)

    • Pruebe a ejecutar varios distcp en paralelo.Try running multiple distcp in parallel.

    • Recuerde que los archivos grandes tienen un mejor rendimiento que los pequeños.Remember that large files perform better than small files.

Envío de Data Box a MicrosoftShip the Data Box to Microsoft

Siga estos pasos para preparar y enviar el dispositivo Data Box a Microsoft.Follow these steps to prepare and ship the Data Box device to Microsoft.

  1. En primer lugar, prepárese para enviar Data Box o Data Box Heavy.First, Prepare to ship on your Data Box or Data Box Heavy.

  2. Una vez completada la preparación del dispositivo, descargue los archivos BOM.After the device preparation is complete, download the BOM files. Usará estos archivos BOM o de manifiesto más adelante para comprobar los datos cargados en Azure.You will use these BOM or manifest files later to verify the data uploaded to Azure.

  3. Apague el dispositivo y quite los cables.Shut down the device and remove the cables.

  4. Póngase en contacto con UPS para programar la recogida del dispositivo.Schedule a pickup with UPS.

  5. Cuando Microsoft reciba el dispositivo, se conectará a la red del centro de datos, y los datos se cargarán a la cuenta de almacenamiento que especificó al realizar el pedido de dispositivo.After Microsoft receives your device, it is connected to the data center network and the data is uploaded to the storage account you specified when you placed the device order. Compruebe con los archivos BOM que todos los datos se han cargado en Azure.Verify against the BOM files that all your data is uploaded to Azure.

Aplicación de permisos de acceso a archivos y directorios (solo Data Lake Storage Gen2)Apply access permissions to files and directories (Data Lake Storage Gen2 only)

Ya tiene los datos en su cuenta de Azure Storage.You already have the data into your Azure Storage account. Ahora aplicará los permisos de acceso a archivos y directorios.Now you will apply access permissions to files and directories.

Nota

Este paso solo es necesario si usa Azure Data Lake Storage Gen2 como almacén de datos.This step is needed only if you are using Azure Data Lake Storage Gen2 as your data store. Si solo usa una cuenta de Blob Storage sin espacio de nombres jerárquico como almacén de datos, puede omitir esta sección.If you are using just a blob storage account without hierarchical namespace as your data store, you can skip this section.

Creación de una entidad de servicio para la cuenta de Azure Data Lake Storage Gen2Create a service principal for your Azure Data Lake Storage Gen2 account

Para crear una entidad de servicio, consulte Procedimientos para el uso del portal para crear una aplicación de Azure AD y una entidad de servicio que puedan acceder a los recursos.To create a service principal, see How to: Use the portal to create an Azure AD application and service principal that can access resources.

  • Al realizar los pasos que se describen en la sección Asignación de la aplicación a un rol, asegúrese de asignar el rol de Colaborador de datos de blobs de almacenamiento a la entidad de servicio.When performing the steps in the Assign the application to a role section of the article, make sure to assign the Storage Blob Data Contributor role to the service principal.

  • Al realizar los pasos de la sección Obtención de valores para iniciar sesión del artículo, guarde los valores del identificador de aplicación y el secreto de cliente en un archivo de texto.When performing the steps in the Get values for signing in section of the article, save application ID, and client secret values into a text file. ya que los necesitará pronto.You'll need those soon.

Generación de una lista de los archivos copiados con sus permisosGenerate a list of copied files with their permissions

En el clúster de Hadoop local, ejecute este comando:From the on-premises Hadoop cluster, run this command:


sudo -u hdfs ./copy-acls.sh -s /{hdfs_path} > ./filelist.json

Este comando genera una lista de los archivos copiados con sus permisos.This command generates a list of copied files with their permissions.

Nota

En función del número de archivos en HDFS, este comando puede tardar mucho tiempo en ejecutarse.Depending on the number of files in the HDFS, this command can take a long time to run.

Generación de una lista de identidades y asignación a las identidades de Azure Active Directory (ADD)Generate a list of identities and map them to Azure Active Directory (ADD) identities

  1. Descargue el script copy-acls.py.Download the copy-acls.py script. Consulte la sección Descarga de scripts auxiliares y configuración del nodo perimetral para ejecutarlos de este artículo.See the Download helper scripts and set up your edge node to run them section of this article.

  2. Ejecute este comando para generar una lista de identidades únicas.Run this command to generate a list of unique identities.

    
    ./copy-acls.py -s ./filelist.json -i ./id_map.json -g
    

    Este script genera un archivo denominado id_map.json que contiene las identidades que necesita para asignarlas a identidades basadas en ADD.This script generates a file named id_map.json that contains the identities that you need to map to ADD-based identities.

  3. Abra el archivo id_map.json en un editor de texto.Open the id_map.json file in a text editor.

  4. Para cada objeto JSON que aparece en el archivo, actualice con la identidad asignada adecuada el atributo target de un nombre principal de usuario (UPN) de AAD o de un ObjectId (OID).For each JSON object that appears in the file, update the target attribute of either an AAD User Principal Name (UPN) or ObjectId (OID), with the appropriate mapped identity. Cuando haya acabado, guarde el archivo,After you're done, save the file. ya que lo necesitará en el paso siguiente.You'll need this file in the next step.

Aplicación de permisos a los archivos copiados y de asignaciones de identidadesApply permissions to copied files and apply identity mappings

Ejecute este comando para aplicar permisos a los datos que ha copiado en la cuenta de Data Lake Storage Gen2:Run this command to apply permissions to the data that you copied into the Data Lake Storage Gen2 account:

./copy-acls.py -s ./filelist.json -i ./id_map.json  -A <storage-account-name> -C <container-name> --dest-spn-id <application-id>  --dest-spn-secret <client-secret>
  • Reemplace el marcador de posición <storage-account-name> por el nombre de la cuenta de almacenamiento.Replace the <storage-account-name> placeholder with the name of your storage account.

  • Reemplace el marcador de posición <container-name> por el nombre del contenedor.Replace the <container-name> placeholder with the name of your container.

  • Reemplace los marcadores de posición <application-id> y <client-secret> por el identificador de aplicación y el secreto de cliente que recopiló al crear la entidad de servicio.Replace the <application-id> and <client-secret> placeholders with the application ID and client secret that you collected when you created the service principal.

Apéndice: Dividir datos entre varios dispositivos Data BoxAppendix: Split data across multiple Data Box devices

Antes de mover los datos a un dispositivo Data Box, deberá descargar algunos scripts auxiliares, asegurarse de que los datos están organizados de modo que quepan en un dispositivo Data Box y excluir los archivos innecesarios.Before you move your data onto a Data Box device, you'll need to download some helper scripts, ensure that your data is organized to fit onto a Data Box device, and exclude any unnecessary files.

Descarga de scripts auxiliares y configuración del nodo perimetral para ejecutarlosDownload helper scripts and set up your edge node to run them

  1. En el nodo principal o perimetral del clúster de Hadoop local, ejecute este comando:From your edge or head node of your on-premises Hadoop cluster, run this command:

    
    git clone https://github.com/jamesbak/databox-adls-loader.git
    cd databox-adls-loader
    

    Este comando clona el repositorio de GitHub que contiene los scripts auxiliares.This command clones the GitHub repository that contains the helper scripts.

  2. Asegúrese de que el paquete jq está instalado en el equipo local.Make sure that have the jq package installed on your local computer.

    
    sudo apt-get install jq
    
  3. Instale el paquete de Python Requests.Install the Requests python package.

    
    pip install requests
    
  4. Establezca permisos de ejecución en los scripts necesarios.Set execute permissions on the required scripts.

    
    chmod +x *.py *.sh
    
    

Comprobación de que los datos están organizados de modo que quepan en un dispositivo Data BoxEnsure that your data is organized to fit onto a Data Box device

Si el tamaño de los datos supera el tamaño de un dispositivo Data Box, tiene la opción de dividir los archivos en grupos que se pueden almacenar en varios dispositivos.If the size of your data exceeds the size of a single Data Box device, you can split files up into groups that you can store onto multiple Data Box devices.

Si los datos no superan el tamaño de un dispositivo Data Box, puede pasar a la sección siguiente.If your data doesn't exceed the size of a singe Data Box device, you can proceed to the next section.

  1. Con permisos elevados, ejecute el script generate-file-list que descargó con las instrucciones en la sección anterior.With elevated permissions, run the generate-file-list script that you downloaded by following the guidance in the previous section.

    Esta es una descripción de los parámetros del comando:Here's a description of the command parameters:

    sudo -u hdfs ./generate-file-list.py [-h] [-s DATABOX_SIZE] [-b FILELIST_BASENAME]
                     [-f LOG_CONFIG] [-l LOG_FILE]
                     [-v {DEBUG,INFO,WARNING,ERROR}]
                     path
    
    where:
    positional arguments:
    path                  The base HDFS path to process.
    
    optional arguments:
    -h, --help            show this help message and exit
    -s DATABOX_SIZE, --databox-size DATABOX_SIZE
                         The size of each Data Box in bytes.
    -b FILELIST_BASENAME, --filelist-basename FILELIST_BASENAME
                         The base name for the output filelists. Lists will be
                         named basename1, basename2, ... .
    -f LOG_CONFIG, --log-config LOG_CONFIG
                         The name of a configuration file for logging.
    -l LOG_FILE, --log-file LOG_FILE
                         Name of file to have log output written to (default is
                         stdout/stderr)
    -v {DEBUG,INFO,WARNING,ERROR}, --log-level {DEBUG,INFO,WARNING,ERROR}
                         Level of log information to output. Default is 'INFO'.
    
  2. Copie las listas de archivos generadas en HDFS para que estén accesibles para el trabajo DistCp.Copy the generated file lists to HDFS so that they are accessible to the DistCp job.

    hadoop fs -copyFromLocal {filelist_pattern} /[hdfs directory]
    

Exclusión de archivos innecesariosExclude unnecessary files

Tendrá que excluir algunos directorios del trabajo DisCp.You'll need to exclude some directories from the DisCp job. Por ejemplo, excluya los directorios con información de estado que mantienen el clúster en ejecución.For example, exclude directories that contain state information that keep the cluster running.

En el clúster de Hadoop local donde va a iniciar el trabajo DistCp, cree un archivo que especifique la lista de directorios que quiere excluir.On the on-premises Hadoop cluster where you plan to initiate the DistCp job, create a file that specifies the list of directories that you want to exclude.

Este es un ejemplo:Here's an example:

.*ranger/audit.*
.*/hbase/data/WALs.*

Pasos siguientesNext steps

Aprenda cómo funciona Data Lake Storage Gen2 con clústeres de HDInsight.Learn how Data Lake Storage Gen2 works with HDInsight clusters. Consulte Uso de Data Lake Storage Gen2 con clústeres de Azure HDInsight.See Use Azure Data Lake Storage Gen2 with Azure HDInsight clusters.