Cette rubrique décrit comment utiliser JindoDistCp.
Qu'est-ce que JindoDistCp ?
JindoDistCp est un outil de copie de fichiers distribué développé par l'équipe Alibaba Cloud Data Lake Storage pour les transferts de données à grande échelle au sein des clusters et entre ceux-ci. Il s'appuie sur MapReduce pour distribuer les fichiers, gérer les erreurs et assurer la récupération après incident. Il prend en entrée une liste de fichiers et de répertoires pour les tâches MapReduce, chaque tâche copiant une partie de la liste source. Il prend entièrement en charge les scénarios de copie de données entre le système de fichiers distribué Hadoop (HDFS), OSS-HDFS, OSS et S3. Il propose divers paramètres et stratégies de copie personnalisés. Il est optimisé pour la copie de données depuis HDFS vers OSS-HDFS. Grâce à un CopyCommitter personnalisé, il effectue des copies sans renommage (No-Rename) et garantit la cohérence des données à la fin du processus. Ses fonctionnalités sont parfaitement alignées sur celles de S3 DistCp et HDFS DistCp. Il offre des améliorations significatives en termes de performances par rapport à HDFS DistCp. JindoDistCp est conçu pour être un outil de copie de données efficace, stable et sécurisé.
Prérequis environnementaux
JDK 1.8.0 ou version ultérieure.
-
Hadoop 2.3 ou version ultérieure. Vous devez télécharger la dernière version du fichier
jindo-distcp-tool-x.x.x.jar. Ce fichier JAR est inclus dans le packagejindosdk-${version}.tar.gz. Après avoir décompressé le package, vous trouverez le fichier JAR dans le répertoiretools/. Pour plus d'informations, consultez Téléchargements JindoData.RemarqueJindoDistCp est déployé sur les clusters exécutant EMR V5.6.0 ou version ultérieure, ainsi que EMR V3.40.0 ou version ultérieure. Vous pouvez trouver le fichier
jindo-distcp-tool-x.x.x.jardans le répertoire/opt/apps/JINDOSDK/jindosdk-current/tools.
Paramètres
JindoDistCp est fourni sous forme de package JAR. Vous pouvez utiliser la commande hadoop jar avec une série de paramètres pour effectuer des opérations de migration.
Paramètre | Type de paramètre | Description | Valeur par défaut | Version | OSS | OSS-HDFS |
Obligatoire | Spécifie le répertoire source. Les préfixes suivants sont pris en charge :
| Aucune | 4.3.0 ou version ultérieure | Prise en charge | Pris en charge | |
Obligatoire | Spécifie le répertoire de destination. Les préfixes suivants sont pris en charge :
| Aucune | 4.3.0 ou version ultérieure | Pris en charge | Prise en charge | |
Facultatif | Spécifie la limite de bande passante pour un seul nœud. Unité : Mo. | -1 | 4.3.0 ou version ultérieure | Prise en charge | Prise en charge | |
Facultatif | Spécifie le type de compression. Les codecs pris en charge incluent gzip, gz, lzo, lzop et snappy. | keep (Le type de compression reste inchangé.) | 4.3.0 ou version ultérieure | Prise en charge | Pris en charge | |
Facultatif | Spécifie la politique de stockage pour la destination. Valeurs valides : Standard, IA, Archive et ColdArchive. | Standard | 4.3.0 ou version ultérieure | Prise en charge | Non pris en charge | |
Facultatif | Spécifie le fichier contenant les règles de filtrage. | Aucune | 4.3.0 ou version ultérieure | Prise en charge | Prise en charge | |
Facultatif | Les paramètres s'appliquent aux fichiers correspondant à la règle. | Aucune | 4.3.0 ou version ultérieure | Pris en charge | Prise en charge | |
Facultatif | Spécifie la concurrence de la tâche DistCp. Cela correspond au paramètre mapreduce.job.maps dans une tâche MapReduce. | 10 | 4.3.0 ou version ultérieure | Prise en charge | Prise en charge | |
Facultatif | Spécifie le nombre de fichiers à traiter par chaque tâche DistCp. | 10000 | 4.5.1 ou version ultérieure | Prise en charge | Pris en charge | |
Facultatif | Spécifie le nombre de fichiers à traiter par chaque tâche DistCp. | 1 | 4.3.0 ou version ultérieure | Pris en charge | Prise en charge | |
Facultatif | Spécifie le répertoire temporaire. | /tmp | 4.3.0 ou version ultérieure | Pris en charge | Prise en charge | |
Facultatif | Définit une configuration. | Aucune | 4.3.0 ou version ultérieure | Prise en charge | Prise en charge | |
Facultatif | Indique s'il faut désactiver la vérification de la somme de contrôle. | false | 4.3.0 ou version ultérieure | Pris en charge | Prise en charge | |
Facultatif | Indique s'il faut supprimer les fichiers source. Cette option sert à déplacer des données. | false | 4.3.0 ou version ultérieure | Pris en charge | Pris en charge | |
Facultatif | Indique s'il faut activer les transactions pour garantir l'atomicité au niveau de la tâche. | false | 4.3.0 ou version ultérieure | Pris en charge | Pris en charge | |
Facultatif | Indique s'il faut ignorer les exceptions levées lors de la tâche de copie pour éviter l'interruption de celle-ci. | false | 4.3.0 ou version ultérieure | Prise en charge | Prise en charge | |
Facultatif | Indique s'il faut activer la surveillance et les alertes. | false | 4.5.1 ou version ultérieure | Prise en charge | Prise en charge | |
Facultatif | Définit le mode DistCp sur DIFF pour afficher les différences entre les fichiers source et de destination. | DistCpMode.COPY | 4.3.0 ou version ultérieure | Pris en charge | Prise en charge | |
Facultatif | Définit le mode DistCp sur UPDATE pour activer la synchronisation incrémentielle. Cette option ignore les fichiers et répertoires identiques et ne synchronise que les nouveaux fichiers et répertoires ou ceux ayant été modifiés, de la source vers la destination. | DistCpMode.COPY | 4.3.0 ou version ultérieure | Pris en charge | Prise en charge | |
Facultatif | Indique s'il faut conserver les informations de métadonnées. | false | 4.4.0 ou version ultérieure | Non pris en charge | Pris en charge |
--src et --dest (obligatoires)
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Pris en charge |
Pris en charge |
--src: spécifie le chemin des fichiers source.--dest: spécifie le chemin des fichiers de destination.
La commande suivante fournit un exemple :
hadoop jar jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table
Vous pouvez spécifier le répertoire de destination à l'aide du chemin dest. Par exemple, la commande précédente copie les fichiers de /data/hourly_table vers le répertoire hourly_table du bucket example-oss-bucket. Ce comportement diffère de celui de Hadoop DistCp. Par défaut, JindoDistCp copie tous les fichiers du répertoire source vers le chemin de destination spécifié, mais n'inclut pas le répertoire racine de la source. Vous pouvez spécifier un répertoire racine dans le chemin de destination. Si le répertoire n'existe pas, il est automatiquement créé.
Pour copier un seul fichier, vous devez spécifier un répertoire comme destination.
hadoop jar jindo-distcp-tool-${version}.jar --src /test.txt --dest oss://example-oss-bucket/tmp
Utilisation de --bandWidth
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Pris en charge |
Prise en charge |
--bandWidth : spécifie la bande passante qu'un seul nœud peut utiliser pour la tâche DistCp, en Mo. Ce paramètre empêche un seul nœud de consommer trop de bande passante.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --bandWidth 6
Utilisation de --codec
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Prise en charge |
Les fichiers source sont souvent stockés dans OSS ou OSS-HDFS sous forme de texte non compressé, ce qui n'est pas idéal pour les coûts de stockage ou l'analyse des données. Vous pouvez utiliser l'option --codec pour stocker efficacement les données en compressant les fichiers en ligne.
--codec spécifie le codec de compression de fichier. Il prend en charge les encodeurs gzip, gz, lzo, lzop et snappy, ainsi que les mots-clés none et keep (par défaut). Les mots-clés sont décrits ci-dessous :
none: enregistre les fichiers sans compression. Si un fichier source est déjà compressé, JindoDistCp le décompresse.keep(par défaut) : copie les fichiers tels quels sans modifier leur état de compression.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --codec gz
Après l'exécution de la commande, les fichiers du dossier de destination sont compressés à l'aide du codec gz.
[root@emr-header-1 opt]# hdfs dfs -ls oss://example-oss-bucket/hourly_table/2017-02-01/03
Found 6 items
-rw-rw-rw- 1 938 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/000151.sst.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/1.log.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/2.log.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/OPTIONS-000109.gz
-rw-rw-rw- 1 506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp01.txt.gz
-rw-rw-rw- 1 506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp06.txt.gz
Pour utiliser le codec lzo dans un cluster Hadoop open source, vous devez installer la bibliothèque native gplcompression et le package hadoop-lzo. Si vous ne disposez pas de l'environnement requis, vous devez utiliser une autre méthode de compression.
Utilisation de --filters
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Pris en charge |
Prise en charge |
--filters : spécifie un fichier contenant les règles de filtrage.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --filters filter.txt
Par exemple, si le fichier filter.txt contient .*test.*, les fichiers dont les chemins contiennent la chaîne « test » ne sont pas copiés vers OSS.
Utilisation de --srcPrefixesFile
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Prise en charge |
--srcPrefixesFile : spécifie un fichier contenant les règles d'inclusion.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --srcPrefixesFile prefixes.txt
Par exemple, si le fichier prefixes.txt contient .*test.*, seuls les fichiers dont les chemins contiennent la chaîne « test » sont copiés vers OSS.
Utilisation de --parallelism
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Prise en charge |
--parallelism : spécifie le paramètre mapreduce.job.maps pour la tâche MapReduce. La valeur par défaut de ce paramètre dans un environnement EMR est 10. Vous pouvez personnaliser la valeur de ce paramètre en fonction des ressources de votre cluster pour contrôler la concurrence de la tâche DistCp.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /opt/tmp --dest oss://example-oss-bucket/tmp --parallelism 20
Utilisation de --taskBatch
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Pris en charge |
--taskBatch : spécifie le nombre de fichiers à traiter par chaque tâche DistCp. La valeur par défaut est 1.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --taskBatch 1
Utilisation de --tmp
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Pris en charge |
Pris en charge |
--tmp : spécifie un répertoire temporaire dans HDFS pour stocker les données temporaires. La valeur par défaut est /tmp, qui correspond à hdfs:///tmp/.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --tmp /tmp
Configuration d'une AccessKey pour accéder à OSS ou OSS-HDFS
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Prise en charge |
--hadoopConf : si vous n'êtes pas dans un environnement EMR ou si le service d'accès sans mot de passe rencontre des problèmes, vous pouvez utiliser cette option pour spécifier une AccessKey afin d'accéder à OSS ou OSS-HDFS.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret
Pour éviter de saisir l'AccessKey à chaque fois, vous pouvez préconfigurer l'ID AccessKey et le secret AccessKey pour OSS ou OSS-HDFS dans le fichier core-site.xml de Hadoop. Dans la console EMR, ajoutez la configuration suivante sur la page core-site.xml du service Hadoop-Common.
<configuration>
<property>
<name>fs.oss.accessKeyId</name>
<value>xxx</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>xxx</value>
</property>
</configuration>
Utilisation de --disableChecksum
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Prise en charge |
--disableChecksum : désactive la vérification de la somme de contrôle des fichiers.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --disableChecksum
Utilisation de --deleteOnSuccess
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Pris en charge |
Pris en charge |
--deleteOnSuccess : déplace les données au lieu de les copier. Cette option est similaire à une opération mv. Elle copie d'abord les fichiers, puis les supprime de la source.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --deleteOnSuccess
Utilisation de --enableTransaction
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Pris en charge |
Prise en charge |
--enableTransaction : par défaut, JindoDistCp garantit l'intégrité au niveau de la tâche. Vous pouvez utiliser ce paramètre pour garantir l'intégrité au niveau du job et activer la prise en charge transactionnelle entre les jobs.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --enableTransaction
Utilisation de --ignore
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Pris en charge |
Prise en charge |
--ignore : ignore les exceptions qui se produisent lors de la migration des données. Les erreurs n'interrompent pas la tâche. Elles sont plutôt signalées sous forme de valeurs JindoCounter. Si CMS est activé, une notification est également envoyée.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --ignore
Utilisation de --diff
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Prise en charge |
--diff : compare les fichiers source et de destination. Si un fichier source n'est pas synchronisé vers la destination, un fichier contenant les différences est généré dans le répertoire actuel. Si votre tâche JindoDistCp implique une compression ou une décompression, --diff ne peut pas afficher les différences de fichiers correctes car la taille du fichier change pendant le processus.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff
Si des différences sont trouvées, un fichier contenant les différences est généré dans le répertoire actuel et le message suivant s'affiche :
JindoCounter
DIFF_FILES=1
Si votre --dest est un chemin HDFS, les formats /path, hdfs://hostname:ip/path et hdfs://headerIp:ip/path sont pris en charge. Les formats hdfs:///path, hdfs:/path ou autres formats personnalisés ne sont pas pris en charge.
Pour afficher les différences dans les métadonnées des fichiers, exécutez la commande --diff --preserveMeta :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff --preserveMeta
Utilisation de --update
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Prise en charge |
--update : active la synchronisation incrémentielle. Cette option ignore les fichiers et répertoires identiques et ne synchronise que les nouveaux fichiers et répertoires ou ceux ayant été modifiés, de la source vers la destination.
Si une tâche JindoDistCp échoue, vous pouvez utiliser ce paramètre pour la reprendre à partir du point d'arrêt et copier uniquement les fichiers restants. Vous pouvez également utiliser ce paramètre pour copier les nouveaux fichiers ajoutés à la source après la fin de la tâche JindoDistCp précédente.
La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --update
Écriture de données dans OSS avec les classes de stockage Cold Archive, Archive ou IA
|
Version |
OSS |
OSS-HDFS |
|
4.3.0 ou version ultérieure |
Prise en charge |
Non pris en charge |
--policy : spécifie la classe de stockage pour les données écrites dans OSS. Vous pouvez définir ce paramètre sur Cold Archive, Archive ou IA. Si vous ne spécifiez pas ce paramètre, les données sont écrites par défaut dans la classe de stockage Standard.
-
Écrire des données dans la classe de stockage Cold Archive (coldArchive) dans OSS
Cette fonctionnalité est disponible uniquement dans certaines régions. Pour plus d'informations, consultez Classes de stockage OSS. La commande suivante fournit un exemple :
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy coldArchive --parallelism 20 -
Écrire des données dans la classe de stockage Archive (archive) dans OSS
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy archive --parallelism 20 -
Écrire des données dans la classe de stockage IA (ia) dans OSS
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy ia --parallelism 20
Utilisation de --preserveMeta
|
Version |
OSS |
OSS-HDFS |
|
4.4.0 ou version ultérieure |
Non pris en charge |
Pris en charge |
--preserveMeta : spécifie que les métadonnées sont migrées avec les données. Les métadonnées incluent Owner, Group, Permission, Atime, Mtime, Replication, BlockSize, XAttrs et ACL.
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --preserveMeta
Utilisation de --jobBatch
|
Version |
OSS |
OSS-HDFS |
|
4.5.1 ou version ultérieure |
Prise en charge |
Prise en charge |
--jobBatch : lorsque votre tâche DistCp écrit des données dans OSS, vous pouvez utiliser --jobBatch pour spécifier le nombre de fichiers à traiter par chaque job DistCp. La valeur par défaut est 10 000.
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --jobBatch 50000
Utilisation de --enableCMS
|
Version |
OSS |
OSS-HDFS |
|
4.5.1 ou version ultérieure |
Prise en charge |
Prise en charge |
--enableCMS : active la fonctionnalité d'alerte CMS .
Compteurs JindoDistCp
Les compteurs JindoDistCp résument les résultats d'une tâche JindoDistCp. Le tableau suivant décrit les compteurs.
|
Paramètre |
Description |
|
COPY_FAILED |
Nombre de fichiers dont la copie a échoué. |
|
CHECKSUM_DIFF |
Nombre de fichiers dont la vérification de la somme de contrôle a échoué. Inclus dans COPY_FAILED. |
|
FILES_EXPECTED |
Nombre de fichiers devant être copiés. |
|
BYTES_EXPECTED |
Nombre d'octets devant être copiés. |
|
FILES_COPIED |
Nombre de fichiers copiés avec succès. |
|
BYTES_COPIED |
Nombre d'octets copiés avec succès. |
|
FILES_SKIPPED |
Nombre de fichiers ignorés lors d'une mise à jour incrémentielle. |
|
BYTES_SKIPPED |
Nombre d'octets ignorés lors d'une mise à jour incrémentielle. |
|
DIFF_FILES |
Nombre de fichiers différents entre les chemins source et de destination. |
|
SAME_FILES |
Nombre de fichiers identiques entre les chemins source et de destination. |
|
DST_MISS |
Nombre de fichiers absents du chemin de destination. Inclus dans DIFF_FILES. |
|
LENGTH_DIFF |
Nombre de fichiers dont la taille diffère entre la source et la destination. Inclus dans DIFF_FILES. |
|
CHECKSUM_DIFF |
Nombre de fichiers dont la vérification de la somme de contrôle a échoué. Inclus dans DIFF_FILES. |
|
DIFF_FAILED |
Nombre de fichiers pour lesquels l'opération de comparaison a rencontré une anomalie. |