Comment copier un fichier de HDFS vers le système de fichiers local

135

Comment copier un fichier de HDFS vers le système de fichiers local. Il n'y a pas d'emplacement physique d'un fichier sous le fichier, pas même de répertoire. comment puis-je les déplacer dans mon local pour d'autres validations.Je suis essayé via winscp.

Surya
la source

Réponses:

242
  1. bin/hadoop fs -get /hdfs/source/path /localfs/destination/path
  2. bin/hadoop fs -copyToLocal /hdfs/source/path /localfs/destination/path
  3. Pointez votre navigateur Web sur HDFS WEBUI ( namenode_machine:50070), recherchez le fichier que vous souhaitez copier, faites défiler la page et cliquez sur télécharger le fichier .
Tariq
la source
tariq parfait, je l'ai eu, il n'y a pas d'emplacement physique d'un fichier sous le fichier, pas même de répertoire. bin / hadoop dfs -ls / use / hadoop / myfolder je peux afficher le fichier, à partir de l'information que j'ai obtenue pour inspecter le fichier, vous pouvez le copier de HDFS vers le système de fichiers local , afin que je puisse les déplacer de winscp
Surya
2
encore une fois, je dois mentionner tariq, merci beaucoup pour votre temps et vos connaissances. Merci beaucoup . Vous avez beaucoup soutenu, cela donne beaucoup de confiance à un nouveau bie comme moi.
Surya
1
Je vois. Vous pouvez en fait utiliser la commande hdfs cat si vous souhaitez voir le contenu du fichier ou ouvrir le fichier sur le webui. Cela vous évitera de télécharger le fichier sur votre fs local. Je vous en prie. Et si vous êtes satisfait à 100% des réponses à vos questions, vous pouvez les marquer afin que d'autres puissent en profiter. Pas seulement pour celle-ci, mais en général.
Tariq
2
Juste pour ajouter à mon dernier commentaire, s'il s'agit d'un fichier binaire, cat ne vous montrera pas le contenu réel. Pour afficher le contenu d'un fichier binaire, vous pouvez utiliser: bin / hadoop fs -text / path / to / file
Tariq
1
Cela semble être un bug (corrigé). Voyez la réponse.
Tariq
27

Dans Hadoop 2.0,

hdfs dfs -copyToLocal <hdfs_input_file_path> <output_path>

où,

  • hdfs_input_file_path peut-être obtenu de http://<<name_node_ip>>:50070/explorer.html

  • output_path est le chemin local du fichier dans lequel le fichier doit être copié.

  • vous pouvez également utiliser getà la place de copyToLocal.

Ani Menon
la source
15

Afin de copier des fichiers de HDFS vers le système de fichiers local, la commande suivante peut être exécutée:

hadoop dfs -copyToLocal <input> <output>

  • <input>: le chemin du répertoire HDFS (par exemple / mydata) que vous souhaitez copier
  • <output>: le chemin du répertoire de destination (par exemple ~ / Documents)
Shafiq
la source
1
Cela ne semble pas fonctionner pour moi. Il indique toujours que le fichier <input> est introuvable. J'utilise l'instance VM de cloudera qui a cent os 6.4
SutharMonil
@SutharMonil Etes-vous sûr que le fichier est bien là? Pouvez-vous y naviguer via hadoop fs -ls?
Dennis Jaheruddin
6

vous pouvez accomplir de ces deux manières.

1.hadoop fs -get <HDFS file path> <Local system directory path>
2.hadoop fs -copyToLocal <HDFS file path> <Local system directory path>

Ex:

Mes fichiers sont situés dans /sourcedata/mydata.txt Je veux copier le fichier dans le système de fichiers local dans ce chemin / user / ravi / mydata

hadoop fs -get /sourcedata/mydata.txt /user/ravi/mydata/
Ramineni Ravi Teja
la source
3

Si votre «fichier» source est divisé entre plusieurs fichiers (peut-être à la suite de map-reduction) qui vivent dans la même arborescence de répertoires, vous pouvez le copier dans un fichier local avec:

hadoop fs -getmerge /hdfs/source/dir_root/ local/destination
Éponyme
la source
Cela devrait être accepté. C'est ce que la plupart des gens recherchent, pas un fichier fractionné.
James O'Brien
2

Cela a fonctionné pour moi sur mon instance de VM d'Ubuntu.

hdfs dfs -copyToLocal [répertoire hadoop] [répertoire local]

Zach
la source
0

si vous utilisez docker, vous devez suivre les étapes suivantes:

  1. copiez le fichier de hdfs vers namenode (hadoop fs -get output / part-r-00000 / out_text). "/ out_text" sera stocké sur le namenode.

  2. copiez le fichier de namenode sur le disque local en (docker cp namenode: / out_text output.txt)

  3. output.txt sera là dans votre répertoire de travail actuel

Arslan
la source
-3
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 
Maniaque Hadoop
la source
1
hdfs dfs -put est une commande pour pousser les fichiers du FS local vers HDFS. hdfs dfs -get est la bonne option
b_rousseau