web-dev-qa-db-fra.com

Comment copier des données d'un HDFS sur un autre HDFS?

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?

11
sharp

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 

24
Avinash

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.

13
Baban Gaigole

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.

6

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

1
priya

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.

0
Pankaj Mandale

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>
0
Paul Back