Cómo copiar archivos de HDFS al sistema de archivos local

135

Cómo copiar archivos de HDFS al sistema de archivos local. No hay una ubicación física de un archivo debajo del archivo, ni siquiera el directorio. ¿Cómo puedo moverlos a mi local para más validaciones? Me prueban a través de winscp.

Surya
fuente

Respuestas:

242
  1. bin/hadoop fs -get /hdfs/source/path /localfs/destination/path
  2. bin/hadoop fs -copyToLocal /hdfs/source/path /localfs/destination/path
  3. Apunte su navegador web a HDFS WEBUI ( namenode_machine:50070), busque el archivo que desea copiar, desplácese hacia abajo en la página y haga clic en descargar el archivo .
Tariq
fuente
Tariq perfecto, lo tengo, no hay una ubicación física de un archivo debajo del archivo, ni siquiera el directorio. bin / hadoop dfs -ls / use / hadoop / myfolder puedo ver el archivo. Desde que obtuve la información como Para inspeccionar el archivo, puede copiarlo desde HDFS al sistema de archivos local , así que aunque puedo moverlos de winscp
Surya
2
una vez más necesito mencionar tariq, muchas gracias por contribuir con su tiempo y conocimiento. muchas gracias . apoyaste mucho, esto le da mucha confianza a un nuevo bie como yo.
Surya
1
Veo. En realidad, puede usar el comando hdfs cat si desea ver el contenido del archivo o abrir el archivo en el webui. Esto le ahorrará descargar el archivo a su fs local. De nada. Y si está 100% satisfecho con las respuestas a sus preguntas, puede marcarlas para que otros puedan beneficiarse de ella. No solo para esta, sino en general.
Tariq
2
Solo para agregar a mi comentario lat, si se trata de un archivo binario, cat no le mostrará el contenido real. Para ver el contenido de un archivo binario puede usar: bin / hadoop fs -text / path / to / file
Tariq
1
Parece ser un error (corregido). Ver la respuesta
Tariq
27

En Hadoop 2.0,

hdfs dfs -copyToLocal <hdfs_input_file_path> <output_path>

dónde,

  • hdfs_input_file_path tal vez obtenido de http://<<name_node_ip>>:50070/explorer.html

  • output_path es la ruta local del archivo, donde se copiará el archivo.

  • También puede usar geten lugar de copyToLocal.

Ani Menon
fuente
15

Para copiar archivos de HDFS al sistema de archivos local, se puede ejecutar el siguiente comando:

hadoop dfs -copyToLocal <input> <output>

  • <input>: la ruta del directorio HDFS (p. ej. / mydata) que desea copiar
  • <output>: la ruta del directorio de destino (por ejemplo, ~ / Documentos)
Shafiq
fuente
1
Esto no parece funcionar para mí. Siempre dice <input> archivo no encontrado. Estoy utilizando la instancia del cloudera VM que tiene Cent OS 6.4
SutharMonil
@SutharMonil ¿Estás seguro de que el archivo está realmente allí? ¿Puedes navegar allí a través de hadoop fs -ls?
Dennis Jaheruddin
6

puedes lograrlo de ambas maneras.

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

Ex:

Mis archivos se encuentran en /sourcedata/mydata.txt . Quiero copiar el archivo al sistema de archivos local en esta ruta / user / ravi / mydata

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

Si su "archivo" de origen se divide entre varios archivos (tal vez como resultado de map-reduce) que viven en el mismo árbol de directorios, puede copiarlo en un archivo local con:

hadoop fs -getmerge /hdfs/source/dir_root/ local/destination
Epónimo
fuente
Esto debe ser aceptado. Esto es lo que la mayoría de la gente está buscando, no un archivo dividido.
James O'Brien
2

Esto funcionó para mí en mi instancia VM de Ubuntu.

hdfs dfs -copyToLocal [directorio hadoop] [directorio local]

Zach
fuente
0

Si está utilizando Docker, debe seguir los siguientes pasos:

  1. copie el archivo de hdfs a namenode (hadoop fs -get output / part-r-00000 / out_text). "/ out_text" se almacenará en el namenode.

  2. copie el archivo desde namenode al disco local por (docker cp namenode: / out_text output.txt)

  3. output.txt estará allí en su directorio de trabajo actual

Arslan
fuente
-3
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 
Hadoop maniac
fuente
1
hdfs dfs -put es un comando para enviar archivos de FS local a HDFS. hdfs dfs -get es la opción correcta
b_rousseau