Como posso copiar dados de um HDFS para outro HDFS?

Tenho duas configurações de HDFS e quero copiar (não migrar ou mover) algumas tabelas de HDFS1 para HDFS2. Como posso copiar dados de um HDFS para outro HDFS? É possível através do Sqoop ou de outra linha de comando?

Author: sharp, 2015-08-06

6 answers

DistCp (distributed copy) é uma ferramenta usada para copiar dados entre clusters. Ele usa MapReduce para efetuar sua distribuição, manipulação de erros e recuperação, e relatórios. Ele expande uma lista de arquivos e diretórios em entrada para mapear tarefas, cada um dos quais irá copiar uma partição dos arquivos especificados na lista de código.

Uso

: $ hadoop distcp <src> <dst>

Exemplo: $ hadoop distcp hdfs://nn1:8020/file1 hdfs://nn2:8020/file2

file1 de nn1 é copiado para nn2 com o nome do ficheiro file2

Distcp é a melhor ferramenta a partir de agora. Sqoop é usado para copiar dados do banco de dados relacional para HDFS e vice-versa, mas não entre HDFS para HDFS.

Mais informações:

Existem duas versões disponíveis-o desempenho em tempo de execução em {[6] } é mais comparado com distcp

 20
Author: Avinash, 2015-08-07 10:58:23

Hadoop vem com um programa útil chamado distcp para copiar grandes quantidades de dados de e para os sistemas de Ficheiros Hadoop em paralelo. O caso de uso canônico para distcp é para a transferência de dados entre dois clusters HDFS. Se os clusters estão rodando versões idênticas do hadoop, então o esquema hdfs é apropriado para usar.

$ hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar

Os dados na pasta /foo do namenode1 serão copiados para a pasta /bar do namenode2. Se o diretório /bar não existir, ele o criará. Tambem podemos mencionar vários caminhos de origem.

Semelhante ao comando rsync, o comando distcp por omissão irá ignorar os ficheiros que já existem. Também podemos usar a opção -overwrite para substituir os ficheiros existentes no directório de destino. A opção -update só irá actualizar os ficheiros que foram alterados.

$ hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo

distcp também pode ser implementado como um trabalho de MapReduce onde o trabalho de cópia é feito pelos mapas que correm em paralelo através do conjunto. Não haverá redutores.

Se tentar para copiar dados entre dois clusters HDFS que estão executando versões diferentes, o processo de cópia vai falhar, uma vez que os sistemas RPC são incompatíveis. Nesse caso, precisamos usar os sistemas de arquivos HFTP baseados apenas em HTTP para ler a partir da fonte. Aqui o trabalho tem que correr no grupo de destino.
$ hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar

50070 é o número de porto por omissão para o servidor Web incorporado do namenode.

 11
Author: Baban Gaigole, 2015-09-07 17:51:24

distcp é usado para copiar dados de e para os sistemas de arquivos hadoop em paralelo. É semelhante ao comando Genérico hadoop fs -cp. No processo de fundo, distcp é implementado como um trabalho de MapReduce onde os mappers só são implementados para copiar em paralelo através do conjunto.

Utilização:

  • Copiar um ficheiro para outro

    % hadoop distcp file1 file2

  • Copiar as pastas de um local para outro

    % hadoop distcp dir1 dir2

Se dir2 não existir, então irá criar essa pasta e copiar o conteúdo. Se {[5] } já existir, então dir1 será copiado por baixo dele. -overwrite a opção obriga os ficheiros a serem substituídos na mesma pasta. -update a opção só actualiza os ficheiros que são alterados.

  • Transferência de dados entre dois grupos HDFS

    % hadoop distcp -update -delete hdfs://nn1/dir1 hdfs://nn2/dir2

-delete uma opção apaga os ficheiros ou directórios da destino que não estão presentes na fonte.

 5
Author: Sai Kiran Neelakantam, 2015-08-08 19:18:38

Também é útil notar que você pode executar as tarefas MapReduce subjacentes com a fonte ou cluster alvo como assim:

hadoop --config /path/to/hadoop/config distcp <src> <dst>
 0
Author: Paul Back, 2017-03-08 19:55:36

Comando Distcp usado para copiar de um conjunto para outro em paralelo. Você tem que definir o caminho para o nome do src e caminho para o nome do DST, internamente ele usa mapper.

Exemplo:

$ hadoop distcp <src> <dst>

Existem poucas opções que possa definir para o distcp

-m for no. de mapper para copiar dados isso vai aumentar a velocidade de cópia.

-Atómico para enviar automaticamente os dados.

-o update só irá actualizar os dados antigos versao.

Existe um comando genérico para copiar ficheiros no hadoop are-cp and-put, mas eles são usados apenas quando o volume de dados é menor.

 0
Author: Pankaj Mandale, 2018-07-20 16:28:34