O Jindo DistCp é uma ferramenta de cópia distribuída desenvolvida pela equipe de armazenamento de data lake da Alibaba Cloud para transferir grandes volumes de dados entre sistemas de armazenamento: Hadoop Distributed File System (HDFS), OSS-HDFS, Object Storage Service (OSS) e Amazon Simple Storage Service (Amazon S3). Ela usa MapReduce para paralelizar transferências, tratar erros e recuperar-se de falhas. Ao copiar do HDFS para o OSS-HDFS, o Jindo DistCp emprega um CopyCommitter personalizado que copia arquivos sem renomeá-los, mantendo as cópias consistentes com a origem. O Jindo DistCp oferece suporte a todos os recursos do Amazon S3 DistCp e do HDFS DistCp. Em comparação com o HDFS DistCp, o Jindo DistCp melhora significativamente a eficiência, a estabilidade e a segurança na cópia de dados.
Pré-requisitos
Antes de começar, verifique se você tem:
Java Development Kit (JDK) 1.8.0 instalado
-
O arquivo JAR do Jindo DistCp (
jindo-distcp-tool-x.x.x.jar):No EMR V5.6.0 ou superior (versões menores), ou EMR V3.40.0 ou superior (versões menores): o JAR vem pré-instalado em
/opt/apps/JINDOSDK/jindosdk-current/tools.No Hadoop 2.3 ou superior (não EMR): baixe o pacote
jindosdk-${version}.tar.gzem Download do JindoData, extraia-o e localize o arquivojindo-distcp-tool-x.x.x.jarna pasta/tools.
Parâmetros
Execute o Jindo DistCp com o comando hadoop jar:
hadoop jar jindo-distcp-tool-${version}.jar --src <source> --dest <destination> [options]
A tabela a seguir resume todos os parâmetros. Consulte as seções abaixo para obter detalhes sobre cada um.
|
Parâmetro |
Obrigatório |
Padrão |
Versão |
OSS |
OSS-HDFS |
Descrição |
|
Sim |
— |
4.3.0+ |
Suportado |
Suportado |
Caminho de origem |
|
|
Sim |
— |
4.3.0+ |
Suportado |
Suportado |
Caminho de destino |
|
|
Não |
-1 |
4.3.0+ |
Suportado |
Suportado |
Limite de largura de banda por tarefa (MB); |
|
|
Não |
keep |
4.3.0+ |
Suportado |
Suportado |
Codec de compactação para arquivos de destino |
|
|
Não |
Standard |
4.3.0+ |
Suportado |
Não suportado |
Classe de armazenamento do OSS para arquivos de destino |
|
|
Não |
— |
4.3.0+ |
Suportado |
Suportado |
Arquivo contendo padrões regex para exclusão |
|
|
Não |
— |
4.3.0+ |
Suportado |
Suportado |
Arquivo contendo padrões regex para inclusão |
|
|
Não |
10 |
4.3.0+ |
Suportado |
Suportado |
Número de tarefas de map (equivalente a |
|
|
Não |
10.000 |
4.5.1+ |
Suportado |
Suportado |
Máximo de arquivos por job |
|
|
Não |
1 |
4.3.0+ |
Suportado |
Suportado |
Arquivos por tarefa de map |
|
|
Não |
/tmp |
4.3.0+ |
Suportado |
Suportado |
Diretório temporário do HDFS |
|
|
Não |
— |
4.3.0+ |
Suportado |
Suportado |
Configuração inline do Hadoop (para credenciais) |
|
|
Não |
false |
4.3.0+ |
Suportado |
Suportado |
Ignora a verificação de checksum após a cópia |
|
|
Não |
false |
4.3.0+ |
Suportado |
Suportado |
Exclui arquivos de origem após uma cópia bem-sucedida |
|
|
Não |
false |
4.3.0+ |
Suportado |
Suportado |
Ativa atomicidade no nível do job |
|
|
Não |
false |
4.3.0+ |
Suportado |
Suportado |
Continua o job quando falhas ocorrem em cópias individuais de arquivos |
|
|
Não |
false |
4.5.1+ |
Suportado |
Suportado |
Ativa monitoramento e alertas via CloudMonitor |
|
|
Não |
DistCpMode.COPY |
4.3.0+ |
Suportado |
Suportado |
Gera um arquivo registrando diferenças entre origem e destino |
|
|
Não |
DistCpMode.COPY |
4.3.0+ |
Suportado |
Suportado |
Copia apenas arquivos ausentes ou diferentes no destino |
|
|
Não |
false |
4.4.0+ |
Não suportado |
Suportado |
Copia metadados do arquivo (Owner, Group, Permission, etc.) |
O parâmetro--policyaplica-se apenas ao OSS. O parâmetro--preserveMetaaplica-se apenas ao OSS-HDFS, pois o OSS não possui um modelo de metadados equivalente ao do HDFS. Todos os outros parâmetros funcionam tanto com OSS quanto com OSS-HDFS.
--src e --dest
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
O parâmetro --src especifica o caminho de origem. O parâmetro --dest especifica o caminho de destino. Ambos aceitam os seguintes prefixos: hdfs://, oss://, s3://, cos://, obs://.
Por padrão, o Jindo DistCp copia o conteúdo do diretório de origem, e não o diretório em si. Caso o diretório de destino não exista, o Jindo DistCp o cria automaticamente.
Copie um diretório:
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table
Esse comando copia todos os arquivos dentro de /data/hourly_table para oss://example-oss-bucket/hourly_table/.
Copie um único arquivo (especifique um diretório de destino, não o caminho de um arquivo):
hadoop jar jindo-distcp-tool-${version}.jar \
--src /test.txt \
--dest oss://example-oss-bucket/tmp
--bandWidth
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Limita a largura de banda usada por cada tarefa de map. Unidade: MB. Use este parâmetro para evitar que jobs de cópia saturem a rede. O valor padrão -1 significa sem limite.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--bandWidth 6
--codec
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Compacta ou descompacta arquivos durante a cópia. Valores válidos: gzip, gz, lzo, lzop, snappy, none, keep.
|
Valor |
Comportamento |
|
|
Copia os arquivos como estão, sem compactar ou descompactar |
|
|
Copia sem compactação; descompacta o arquivo de origem se ele estiver compactado |
|
|
Compacta o arquivo de destino usando o codec especificado |
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--codec gz
Após a conclusão do job, os arquivos de destino terão a extensão .gz:
oss://example-oss-bucket/hourly_table/2017-02-01/03/000151.sst.gz
oss://example-oss-bucket/hourly_table/2017-02-01/03/1.log.gz
oss://example-oss-bucket/hourly_table/2017-02-01/03/2.log.gz
oss://example-oss-bucket/hourly_table/2017-02-01/03/OPTIONS-000109.gz
oss://example-oss-bucket/hourly_table/2017-02-01/03/emp01.txt.gz
oss://example-oss-bucket/hourly_table/2017-02-01/03/emp06.txt.gz
Para usar lzo em um cluster Hadoop open source, instale primeiro a biblioteca nativa gplcompression e o pacote hadoop-lzo. Em clusters sem essas dependências, use um codec diferente.
--policy
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Não suportado
Define a classe de armazenamento para arquivos copiados para o OSS. O padrão é Standard. Valores suportados:
|
Valor |
Classe de armazenamento |
Observações |
|
(não definido) |
Standard |
Padrão |
|
|
Infrequent Access (IA) |
Custo reduzido para dados acessados menos de uma vez por mês |
|
|
Archive |
Para arquivamento de longo prazo; a recuperação leva alguns minutos |
|
|
Cold Archive |
Para dados raramente acessados; suportado apenas em regiões específicas |
Exemplo com Cold Archive (verifique antes a disponibilidade por região):
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-bucket/hourly_table \
--policy coldArchive \
--parallelism 20
Exemplo com Archive:
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-bucket/hourly_table \
--policy archive \
--parallelism 20
Exemplo com IA:
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-bucket/hourly_table \
--policy ia \
--parallelism 20
--filters
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Exclui arquivos da cópia com base em padrões regex. Aponte --filters para um arquivo contendo um padrão regex por linha. Arquivos cujos caminhos correspondam a qualquer padrão serão ignorados.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--filters filter.txt
Se filter.txt contiver .*test.*, arquivos com test em qualquer parte do caminho serão excluídos.
--srcPrefixesFile
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Copia apenas os arquivos cujos caminhos correspondem aos padrões regex no arquivo especificado. Este parâmetro funciona de forma inversa ao --filters: somente os arquivos correspondentes são incluídos.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--srcPrefixesFile prefixes.txt
Caso prefixes.txt contenha .*test.*, apenas arquivos com test no caminho serão copiados.
--parallelism
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Defina o número de tarefas de map para o job do DistCp, equivalente ao parâmetro mapreduce.job.maps. O valor padrão no EMR é 10.
Como os arquivos representam a menor unidade de trabalho em um job do DistCp, aumentar o número de tarefas de map além da quantidade total de arquivos não traz benefícios. Adicionar mais tarefas melhora o throughput apenas quando o cluster dispõe de capacidade ociosa de CPU e rede. Ajuste esse valor considerando o tamanho do seu cluster, a quantidade de arquivos e a largura de banda disponível.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /opt/tmp \
--dest oss://example-oss-bucket/tmp \
--parallelism 20
--jobBatch
Versão: 4.5.1+ | OSS: Suportado | OSS-HDFS: Suportado
Defina o número máximo de arquivos processados por job do DistCp. Padrão: 10000. Aumente este valor ao copiar grandes conjuntos de dados para reduzir a sobrecarga do job.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--jobBatch 50000
--taskBatch
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Defina a quantidade de arquivos processados por tarefa de map. Padrão: 1.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--taskBatch 1
--tmp
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Especifica o diretório HDFS usado para armazenar dados temporários. Padrão: /tmp (resolve para hdfs:///tmp/).
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--tmp /tmp
--hadoopConf
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Passa propriedades de configuração do Hadoop diretamente na linha de comando. Use esta opção para fornecer credenciais para OSS ou OSS-HDFS em ambientes fora do EMR, ou quando o acesso sem AccessKey não estiver disponível.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--hadoopConf fs.oss.accessKeyId=<your-access-key-id> \
--hadoopConf fs.oss.accessKeySecret=<your-access-key-secret>
Para evitar passar credenciais em cada comando, adicione-as ao arquivo core-site.xml do serviço Hadoop-Common no console do EMR:
<configuration>
<property>
<name>fs.oss.accessKeyId</name>
<value>xxx</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>xxx</value>
</property>
</configuration>
--disableChecksum
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Ignora a verificação de checksum após a cópia. Por padrão, o Jindo DistCp verifica os checksums dos arquivos para confirmar a integridade dos dados. Desative essa verificação apenas quando ela causar falsas falhas — por exemplo, ao copiar entre sistemas de armazenamento que usam algoritmos de checksum incompatíveis.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--disableChecksum
--deleteOnSuccess
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Exclui os arquivos de origem após uma cópia bem-sucedida — semelhante a uma operação mv. Use este recurso para migração de dados quando os arquivos de origem não forem mais necessários após a transferência.
A exclusão é irreversível. Verifique se a cópia foi concluída com sucesso antes de usar este sinalizador em produção.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--deleteOnSuccess
--enableTransaction
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Ativa atomicidade no nível do job. Por padrão, o Jindo DistCp garante a integridade dos dados no nível da tarefa — uma tarefa com falha não afeta as demais. Com --enableTransaction, todo o job tem sucesso ou falha como uma unidade única: nenhum resultado parcial é gravado no destino.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--enableTransaction
--ignore
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Permite que o job continue quando falhas ocorrerem em cópias individuais de arquivos, em vez de interromper toda a execução. Os arquivos com falha são registrados nos contadores do Jindo DistCp (consulte COPY_FAILED). Se o CloudMonitor estiver ativado, alertas serão enviados pelos canais de notificação configurados.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--ignore
--diff
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Ativa o modo DIF. Nesse modo, caso um arquivo de origem não seja copiado para o diretório de destino, um arquivo é gerado no diretório onde o comando foi executado para registrar as diferenças entre os arquivos de origem e destino.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--diff
Exemplo de saída quando existem diferenças:
JindoCounter
DIFF_FILES=1
Para incluir metadados na comparação, combine --diff com --preserveMeta:
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--diff --preserveMeta
Limitações:
Diferenças no tamanho dos arquivos podem não ser precisas se o Jindo DistCp aplicou compactação ou descompactação durante uma cópia anterior.
Quando
--destfor um caminho HDFS, use/path,hdfs://hostname:port/pathouhdfs://headerIp:port/path. Os formatoshdfs:///pathehdfs:/pathnão são suportados.
--update
Versão: 4.3.0+ | OSS: Suportado | OSS-HDFS: Suportado
Copia apenas arquivos ausentes no destino ou diferentes dos arquivos correspondentes já existentes. Ideal para retomar um job interrompido ou sincronizar novos arquivos adicionados à origem.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--update
--preserveMeta
Versão: 4.4.0+ | OSS: Não suportado | OSS-HDFS: Suportado
Copia os metadados do arquivo juntamente com seu conteúdo. Os seguintes atributos de metadados são preservados: Owner, Group, Permission, Atime, Mtime, Replication, BlockSize, XAttrs e ACL.
O OSS não suporta este parâmetro porque não possui um modelo de metadados equivalente ao do HDFS. Use este parâmetro apenas quando o destino for OSS-HDFS.
hadoop jar jindo-distcp-tool-${version}.jar \
--src /data/hourly_table \
--dest oss://example-oss-bucket/hourly_table \
--preserveMeta
--enableCMS
Versão: 4.5.1+ | OSS: Suportado | OSS-HDFS: Suportado
Ativa monitoramento e alertas por meio do CloudMonitor. Quando ativo, o CloudMonitor envia notificações pelos canais de alerta configurados sempre que ocorrerem erros de cópia.
Contadores do Jindo DistCp
Após cada job, o Jindo DistCp relata estatísticas de execução por meio de contadores. Use-os para verificar resultados de cópia e diagnosticar problemas.
|
Contador |
Descrição |
|
|
Quantidade de arquivos esperados para cópia |
|
|
Volume de bytes esperados para cópia |
|
|
Total de arquivos copiados com sucesso |
|
|
Total de bytes copiados com sucesso |
|
|
Arquivos ignorados durante atualização incremental ( |
|
|
Bytes ignorados durante atualização incremental |
|
|
Arquivos que falharam na cópia |
|
|
Arquivos que falharam na verificação de checksum; incluído em |
|
|
Arquivos diferentes entre origem e destino (modo |
|
|
Arquivos idênticos na origem e no destino (modo |
|
|
Arquivos ausentes no destino; incluído em |
|
|
Arquivos com tamanhos diferentes entre origem e destino; incluído em |
|
|
Arquivos que não puderam ser comparados |