Partager via


Utilisez DistCp pour copier des données entre Azure Storage Blobs et Azure Data Lake Storage

Vous pouvez utiliser DistCp pour copier des données entre un compte de stockage V2 universel et un compte de stockage V2 universel avec espace de noms hiérarchique activé. Cet article fournit des instructions sur l’utilisation de l’outil DistCp.

DistCp propose différents paramètres en ligne de commande et nous vous encourageons vivement à lire cet article pour en optimiser votre utilisation. Cet article explique les fonctionnalités de base tout en mettant l’accent sur son utilisation pour la copie de données vers un compte avec espace de noms hiérarchique activé.

Prérequis

  • Un abonnement Azure. Pour plus d’informations, consultez Obtenir l’essai gratuit Azure.
  • Un compte de stockage Azure existant sans fonctionnalités Data Lake Storage (espace de noms hiérarchique) activées.
  • Un compte de stockage Azure avec des fonctionnalités Data Lake Storage (espace de noms hiérarchique) activées. Pour obtenir des instructions sur la façon d’en créer un, consultez Créer un compte de stockage Azure
  • Un conteneur créé dans le compte de stockage avec l’espace de noms hiérarchique activé.
  • Un cluster Azure HDInsight ayant accès à un compte de stockage avec la fonctionnalité d’espace de noms hiérarchique activée. Pour plus d’informations, consultez Utiliser Azure Data Lake Storage avec les clusters Azure HDInsight. Veillez à activer le Bureau à distance pour le cluster.

Utiliser DistCp à partir d’un cluster HDInsight Linux

Un cluster HDInsight est fourni avec l’utilitaire DistCp, que vous pouvez utiliser pour copier dans un cluster HDInsight des données provenant de différentes sources. Si vous avez configuré le cluster HDInsight pour utiliser à la fois le Stockage Blob Azure et Azure Data Lake Storage, vous pouvez aussi vous servir de l’utilitaire DistCp tel quel pour copier des données de l’un à l’autre. Dans cette section, nous allons voir comment utiliser l’utilitaire DistCp.

  1. Créez une session SSH vers votre cluster HDInsight. Pour plus d’informations, consultez Connexion à un cluster HDInsight sous Linux.

  2. Vérifiez si vous pouvez accéder à votre compte V2 universel existant (sans espace de noms hiérarchique activé).

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

    Vous devriez obtenir la liste du contenu du conteneur.

  3. De même, vérifiez si vous pouvez accéder au compte de stockage avec espace de noms hiérarchique activé à partir du cluster. Exécutez la commande suivante :

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

    La sortie doit fournir la liste des fichiers/dossiers du compte Data Lake Storage.

  4. Utilisez DistCp pour copier les données à partir de WASB (Windows Azure Storage Blob) vers un compte Data Lake Storage.

    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
    

    Cette commande copie le contenu du dossier /example/data/gutenberg/ du stockage Blob vers /myfolder dans le compte Data Lake Storage.

  5. De même, utilisez DistCp pour copier des données d’un compte Data Lake Storage vers le Stockage Blob (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
    

    Cette commande copie le contenu du répertoire /myfolder du compte Data Lake Store vers le dossier /example/data/gutenberg/ de WASB.

Considérations de performances lors de l’utilisation de DistCp

La granularité la plus basse de DistCp étant un fichier unique, la définition du nombre maximal de copies simultanées est le paramètre le plus important à optimiser par rapport à Data Lake Storage. Le nombre de copies simultanées est égal au paramètre de nombre de mappeurs (m) sur la ligne de commande. Ce paramètre spécifie le nombre maximal de mappeurs utilisés pour copier les données. La valeur par défaut est 20.

Exemple

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

Comment déterminer le nombre de mappeurs à utiliser ?

Voici quelques conseils à suivre.

  • Étape 1 : Déterminer la mémoire totale disponible pour la file d’attente d’application YARN « par défaut » - La première étape consiste à déterminer la quantité de mémoire disponible pour la file d’attente d’application YARN « par défaut ». Ces informations sont disponibles dans le portail de Ambari associé au cluster. Accédez à YARN et affichez l’onglet Configurations pour voir la mémoire YARN disponible pour la file d’attente d’application « par défaut ». Il s’agit de la mémoire totale disponible pour votre travail DistCp (qui est en fait un travail MapReduce).

  • Étape 2 : Calculer le nombre de mappeurs - La valeur de m est égale au quotient de la mémoire YARN totale divisée par la taille du conteneur YARN. Les informations sur la taille du conteneur YARN sont également disponibles dans le portail Ambari. Accédez à YARN et affichez l’onglet Configurations. La taille du conteneur YARN s’affiche dans cette fenêtre. L’équation pour obtenir le nombre de mappeurs (m) est

    m = (nombre de nœuds * mémoire YARN pour chaque nœud) / Taille du conteneur YARN

Exemple

Nous supposerons que vous disposez de 4 clusters D14v2s et que vous essayez de transférer 10 TB de données à partir de 10 dossiers différents. Chaque dossier contient différentes quantités de données, et la taille des fichiers dans chaque dossier est différente.

  • Total de mémoire YARN : À partir du portail Ambari, vous déterminez que la mémoire YARN est de 96 Go pour un nœud D14. Ainsi, la mémoire YARN totale pour un cluster à quatre nœuds est :

    Mémoire YARN = 4 * 96 Go = 384 Go

  • Nombre de mappeurs : À partir du portail Ambari, vous déterminez que la taille du conteneur YARN est de 3 072 Mo pour un nœud de cluster D14. Par conséquent, le nombre de mappeurs est :

    m = (quatre nœuds * 96 Go) / 3072 Mo = 128 mappeurs

Si d’autres applications utilisent de la mémoire, vous pouvez choisir d’utiliser uniquement une partie de la mémoire YARN de votre cluster pour DistCp.

Copie de jeux de données volumineux

Lorsque la taille du jeu de données à déplacer est volumineuse (par exemple > 1 To) ou si vous avez de nombreux dossiers, vous devez envisager d’utiliser plusieurs tâches DistCp. Le gain de performance est probablement nul, mais il répartit les tâches de sorte que si l’une d’entre elles échoue, il vous suffit de redémarrer cette tâche spécifique plutôt que l’ensemble du travail.

Limites

  • DistCp tente de créer des mappeurs similaires en taille pour optimiser les performances. Les performances ne sont pas toujours améliorées par l’augmentation du nombre de mappeurs.

  • DistCp est limité à un seul mappeur par fichier. Par conséquent, vous ne devez pas avoir plus de mappeurs que de fichiers. Étant donné que DistCp peut affecter un seul mappeur par fichier, cela limite la quantité d’exécutions simultanées utilisables pour copier des fichiers volumineux.

  • Si vos fichiers sont volumineux, nous vous recommandons de les fractionner en blocs de 256 Mo afin d’augmenter les possibilités de concurrence.