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?
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>
$ 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
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.
$ 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.
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.
Try dtIngest , é desenvolvido no topo da plataforma Apex Apache. Esta ferramenta copia dados de diferentes fontes, como HDFS, compartilhamento drive, NFS, FTP, Kafka para diferentes destinos. A cópia de dados do cluster HDFS remoto para o cluster HDFS local é suportada pelo dtIngest. dtIngest executa trabalhos de fios para copiar dados em forma paralela, por isso é muito rápido. Trata de manuseio de falhas, recuperação, etc. e suporta listas de votação periodicamente para fazer continência copiar.
Utilização: dtingest [opção]... SOURCEURL... DESTINATIONURL exemplo: dtingest hdfs: / / nn1: 8020 / source hdfs: / / nn2:8020 / dest
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>
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.