Como copiar um arquivo do HDFS para o sistema de arquivos local

135

Como copiar arquivos do HDFS para o sistema de arquivos local. Não há localização física de um arquivo no arquivo, nem mesmo o diretório. Como posso movê-los para o meu local para mais validações. Sou experimentado através do winscp.

Surya
fonte

Respostas:

242
  1. bin/hadoop fs -get /hdfs/source/path /localfs/destination/path
  2. bin/hadoop fs -copyToLocal /hdfs/source/path /localfs/destination/path
  3. Aponte seu navegador para HDFS WEBUI ( namenode_machine:50070), navegue até o arquivo que você deseja copiar, role a página para baixo e clique em baixar o arquivo .
Tariq
fonte
tariq perfeito, entendi. Não há localização física de um arquivo no arquivo, nem mesmo o diretório. bin / hadoop dfs -ls / use / hadoop / myfolder Eu posso ver o arquivo, De eu tenho as informações como Para inspecionar o arquivo, você pode copiá-lo do HDFS para o sistema de arquivos local , para que eu possa movê-los do winscp
Surya
2
mais uma vez, preciso mencionar o tariq, muito obrigado por contribuir com tempo e conhecimento. Muito obrigado . você apoiou muito, isso dá muita confiança para uma nova garota como eu.
Surya
1
Entendo. Você pode realmente usar o comando hdfs cat se desejar ver o conteúdo do arquivo ou abrir o arquivo no webui. Isso evitará que você baixe o arquivo no seu fs local. Você é bem vindo. E se você estiver 100% satisfeito com as respostas às suas perguntas, poderá marcá-las para que outros possam se beneficiar dela. Não apenas nesta, mas em geral.
Tariq
2
Apenas para adicionar ao meu comentário final, se for um arquivo binário, o gato não mostrará o conteúdo real. Para visualizar o conteúdo de um arquivo binário que você pode usar: bin / hadoop fs -text / path / to / file
Tariq
1
Parece ser um bug (corrigido). Veja a resposta.
Tariq
27

No Hadoop 2.0,

hdfs dfs -copyToLocal <hdfs_input_file_path> <output_path>

Onde,

  • hdfs_input_file_path talvez obtido de http://<<name_node_ip>>:50070/explorer.html

  • output_path é o caminho local do arquivo, para o qual o arquivo deve ser copiado.

  • você também pode usar getno lugar de copyToLocal.

Ani Menon
fonte
15

Para copiar arquivos do HDFS para o sistema de arquivos local, o seguinte comando pode ser executado:

hadoop dfs -copyToLocal <input> <output>

  • <input>: o caminho do diretório HDFS (por exemplo, / mydata) que você deseja copiar
  • <output>: o caminho do diretório de destino (por exemplo, ~ / Documents)
Shafiq
fonte
1
Isso não parece funcionar para mim. Ele sempre diz que o arquivo <input> não foi encontrado. Eu estou usando a instância de VM do cloudera que tem cent os 6.4
SutharMonil 30/11/2015
@SutharMonil Tem certeza de que o arquivo está realmente lá? Você pode navegar lá via hadoop fs -ls?
Dennis Jaheruddin
6

você pode realizar de ambas as formas.

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

Ex:

Meus arquivos estão localizados em /sourcedata/mydata.txt . Quero copiar o arquivo para o sistema de arquivos local neste caminho / user / ravi / mydata

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

Se o seu "arquivo" de origem estiver dividido em vários arquivos (talvez como resultado da redução de mapa) que residem na mesma árvore de diretórios, você poderá copiá-lo para um arquivo local com:

hadoop fs -getmerge /hdfs/source/dir_root/ local/destination
Epônimo
fonte
Isso deve ser aceito. É isso que a maioria das pessoas procura, não um arquivo dividido.
James O'Brien
2

Isso funcionou para mim na minha instância de VM do Ubuntu.

hdfs dfs -copyToLocal [diretório hadoop] [diretório local]

Zach
fonte
0

se você estiver usando a janela de encaixe, execute as seguintes etapas:

  1. copie o arquivo de hdfs para namenode (hadoop fs -get output / parte-r-00000 / out_text). "/ out_text" será armazenado no namenode.

  2. copie o arquivo do namenode para o disco local (docker cp namenode: / out_text output.txt)

  3. output.txt estará lá no seu diretório de trabalho atual

Arslan
fonte
-3
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 
Maníaco do Hadoop
fonte
1
hdfs dfs -put é um comando para enviar arquivos do FS local para o HDFS. hdfs dfs -get é a opção certa
b_rousseau