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.

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 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.


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)

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/

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

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]


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


-3
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 

1
hdfs dfs -put é um comando para enviar arquivos do FS local para o HDFS. hdfs dfs -get é a opção certa
b_rousseau
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.