J'ai deux configurations HDFS et je veux copier (ne pas migrer ni déplacer) certaines tables de HDFS1 à HDFS2. Comment copier des données d'un HDFS sur un autre HDFS? Est-ce possible via Sqoop ou une autre ligne de commande?
DistCp (copie distribuée) est un outil utilisé pour copier des données entre des clusters. Il utilise MapReduce pour effectuer sa distribution, sa gestion des erreurs, sa récupération et sa génération de rapports. Il développe une liste de fichiers et de répertoires en entrée pour mapper des tâches. Chacune de ces tâches copie une partition des fichiers spécifiés dans la liste source.
Utilisation: $ hadoop distcp <src> <dst>
exemple: $ hadoop distcp hdfs://nn1:8020/file1 hdfs://nn2:8020/file2
file1
à partir de nn1
est copié dans nn2
avec le nom de fichier file2
Distcp est le meilleur outil pour le moment. Sqoop est utilisé pour copier des données d'une base de données relationnelle vers HDFS et inversement, mais pas entre HDFS vers HDFS.
Plus d'informations:
Deux versions sont disponibles - les performances d'exécution dans distcp2
sont plus comparées à distcp
Hadoop est livré avec un programme utile appelé distcp
pour la copie en parallèle de grandes quantités de données vers et depuis Hadoop Filesystems. Le cas d'utilisation canonique de distcp concerne le transfert de données entre deux clusters HDFS . Si les clusters exécutent des versions identiques de hadoop, le schéma hdfs est approprié.
$ hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
Les données du répertoire /foo
de namenode1 seront copiées dans le répertoire/bar de namenode2. Si le répertoire /bar
n'existe pas, il le créera. Nous pouvons aussi mentionner plusieurs chemins sources.
Semblable à la commande rsync
, la commande distcp par défaut ignorera les fichiers existants. Nous pouvons également utiliser l'option -overwrite
pour écraser les fichiers existants dans le répertoire de destination. L'option -update
ne mettra à jour que les fichiers modifiés.
$ hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo
distcp
peut également être implémenté en tant que tâche MapReduce dans laquelle le travail de copie est effectué par les cartes exécutées en parallèle sur le cluster. Il n'y aura pas de réducteurs.
Si vous essayez de copier des données entre deux clusters HDFS exécutant des versions différentes, la copie sera traitée, car les systèmes RPC sont incompatibles. Dans ce cas, nous devons utiliser les systèmes de fichiers HFTP basés sur HTTP en lecture seule pour lire à partir de la source. Ici, le travail doit être exécuté sur le cluster de destination.
$ hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar
50070 est le numéro de port par défaut du serveur Web intégré de namenode.
distcp
est utilisé pour copier des données vers et depuis les systèmes de fichiers hadoop en parallèle. Cette commande est similaire à la commande générique hadoop fs -cp
. Dans le processus d'arrière-plan, distcp
est implémenté en tant que tâche MapReduce, les mappeurs n'étant implémentés que pour une copie en parallèle sur le cluster.
Utilisation:
copier un fichier dans un autre
% hadoop distcp file1 file2
copier des répertoires d'un endroit à un autre
% hadoop distcp dir1 dir2
Si dir2
n'existe pas, il créera ce dossier et copiera le contenu. Si dir2
existe déjà, alors dir1
sera copié sous celui-ci. L'option -overwrite
oblige les fichiers à être écrasés dans le même dossier. L'option -update
met à jour uniquement les fichiers modifiés.
transfert de données entre deux clusters HDFS
% hadoop distcp -update -delete hdfs://nn1/dir1 hdfs://nn2/dir2
L'option -delete
supprime les fichiers ou les répertoires de la destination qui ne sont pas présents dans la source.
Essayez dtIngest , il est développé sur Apache Apex . Cet outil copie les données de différentes sources telles que HDFS, lecteur partagé, NFS, FTP, Kafka vers différentes destinations. La copie de données depuis un cluster HDFS distant vers un cluster HDFS local est prise en charge par dtIngest. dtIngest exécute des travaux en fil pour copier les données en parallèle, donc c'est très rapide. Il prend en charge la gestion des défaillances, la récupération, etc. et prend en charge les répertoires d'interrogation périodiquement pour effectuer des copies en continu.
Utilisation: dtingest [OPTION] ... SOURCEURL ... DESTINATIONURL Exemple: dtingest hdfs: // nn1: 8020/source hdfs: // nn2: 8020/dest
commande distcp utilisée pour copier d’un cluster à un autre en parallèle. Vous devez définir le chemin pour namenode de src et chemin pour namenode de dst, en interne, il utilise mappeur.
Exemple:
$ hadoop distcp <src> <dst>
il y a peu d'options que vous pouvez définir pour distcp
-m pour no. du mappeur pour la copie des données, cela augmentera la vitesse de copie.
-atomic pour valider automatiquement les données.
-update ne mettra à jour que les données de l'ancienne version.
Il existe des commandes génériques pour la copie de fichiers dans hadoop: -cp et -put, mais elles ne sont utilisées que lorsque le volume de données est inférieur.
Il est également utile de noter que vous pouvez exécuter les travaux MapReduce sous-jacents avec le cluster source ou cible, comme suit:
hadoop --config /path/to/hadoop/config distcp <src> <dst>