Este tópico descreve como usar o JindoDistCp.
O que é o JindoDistCp
O JindoDistCp é uma ferramenta de cópia distribuída de arquivos desenvolvida pela equipe do Alibaba Cloud Data Lake Storage para transferências de dados em grande escala dentro e entre clusters. Ela usa MapReduce para distribuir arquivos, tratar erros e recuperar-se de falhas. A ferramenta recebe uma lista de arquivos e diretórios como entrada para tarefas MapReduce, em que cada tarefa copia uma parte da lista de origem. Há suporte completo a cenários de cópia de dados entre Hadoop Distributed File System (HDFS), OSS-HDFS, OSS e S3. Diversos parâmetros e estratégias personalizadas de cópia estão disponíveis. A ferramenta é otimizada para copiar dados do HDFS para o OSS-HDFS. Com um CopyCommitter personalizado, ela executa cópias sem renomeação (No-Rename) e garante a consistência dos dados após a conclusão. Seus recursos estão totalmente alinhados aos do S3 DistCp e do HDFS DistCp, com melhorias significativas de desempenho em relação ao HDFS DistCp. O JindoDistCp foi projetado para ser uma ferramenta de cópia de dados eficiente, estável e segura.
Requisitos de ambiente
JDK 1.8.0 ou posterior.
-
Hadoop 2.3 ou posterior. Baixe a versão mais recente do arquivo
jindo-distcp-tool-x.x.x.jar. Esse arquivo JAR está incluído no pacotejindosdk-${version}.tar.gz. Após descompactar o pacote, localize o arquivo JAR no diretóriotools/. Para mais informações, consulte JindoData downloads.NotaO JindoDistCp vem implantado em clusters que executam EMR V5.6.0 ou posterior e EMR V3.40.0 ou posterior. Encontre o arquivo
jindo-distcp-tool-x.x.x.jarno diretório/opt/apps/JINDOSDK/jindosdk-current/tools.
Parâmetros
O JindoDistCp é fornecido como um pacote JAR. Use o comando hadoop jar com uma série de parâmetros para executar operações de migração.
Parâmetro | Tipo de parâmetro | Descrição | Valor padrão | Versão | OSS | OSS-HDFS |
Obrigatório | Especifique o diretório de origem. Os seguintes prefixos têm suporte:
| Nenhum | 4.3.0 ou posterior | Suporte | Compatível | |
Obrigatório | Defina o diretório de destino. Há suporte aos seguintes prefixos:
| Nenhum | 4.3.0 ou posterior | Compatível | Suporte | |
Opcional | Defina o limite de largura de banda para um único nó. Unidade: MB. | -1 | 4.3.0 ou posterior | Suporte | Suporte | |
Opcional | Defina o tipo de compressão. Os codecs compatíveis incluem gzip, gz, lzo, lzop e snappy. | keep (O tipo de compressão não é alterado.) | 4.3.0 ou posterior | Suporte | Compatível | |
Opcional | Defina a política de armazenamento do destino. Valores válidos: Standard, IA, Archive e ColdArchive. | Standard | 4.3.0 ou posterior | Suporte | Não compatível | |
Opcional | Especifique o arquivo que contém regras de filtro. | Nenhum | 4.3.0 ou posterior | Suporte | Suporte | |
Opcional | As configurações aplicam-se aos arquivos correspondentes à regra. | Nenhum | 4.3.0 ou posterior | Compatível | Suporte | |
Opcional | Defina a simultaneidade da tarefa DistCp. Corresponde ao parâmetro mapreduce.job.maps em uma tarefa MapReduce. | 10 | 4.3.0 ou posterior | Suporte | Suporte | |
Opcional | Defina a quantidade de arquivos processados por cada job DistCp. | 10000 | 4.5.1 ou posterior | Suporte | Compatível | |
Opcional | Defina o número de arquivos a serem processados por cada tarefa DistCp. | 1 | 4.3.0 ou posterior | Compatível | Suporte | |
Opcional | Defina o diretório temporário. | /tmp | 4.3.0 ou posterior | Compatível | Suporte | |
Opcional | Defina uma configuração. | Nenhum | 4.3.0 ou posterior | Suporte | Suporte | |
Opcional | Defina se a verificação de checksum deve ser desativada. | false | 4.3.0 ou posterior | Compatível | Suporte | |
Opcional | Defina se os arquivos de origem devem ser excluídos. Usado para mover dados. | false | 4.3.0 ou posterior | Compatível | Compatível | |
Opcional | Ative transações para garantir atomicidade no nível do job. | false | 4.3.0 ou posterior | Compatível | Compatível | |
Opcional | Ignora exceções geradas durante a tarefa de cópia para evitar interrupções. | false | 4.3.0 ou posterior | Suporte | Suporte | |
Opcional | Ative monitoramento e alertas. | false | 4.5.1 ou posterior | Suporte | Suporte | |
Opcional | Altera o modo DistCp para DIFF para visualizar diferenças entre arquivos de origem e destino. | DistCpMode.COPY | 4.3.0 ou posterior | Compatível | Suporte | |
Opcional | Altera o modo DistCp para UPDATE para ativar sincronização incremental. Arquivos e diretórios idênticos são ignorados; apenas itens novos ou alterados na origem são sincronizados com o destino. | DistCpMode.COPY | 4.3.0 ou posterior | Compatível | Suporte | |
Opcional | Preserva informações de metadados. | false | 4.4.0 ou posterior | Não compatível | Compatível |
--src e --dest (obrigatórios)
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Compatível |
Compatível |
--src: Especifique o caminho dos arquivos de origem.--dest: Defina o caminho dos arquivos de destino.
Exemplo de comando:
hadoop jar jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table
Use o caminho dest para indicar o diretório de destino. Por exemplo, o comando anterior copia arquivos de /data/hourly_table para o diretório hourly_table no bucket example-oss-bucket. Esse comportamento difere do Hadoop DistCp. Por padrão, o JindoDistCp copia todos os arquivos do diretório de origem para o caminho de destino especificado, sem incluir o diretório raiz da origem. É possível definir um diretório raiz no caminho de destino; caso não exista, ele será criado automaticamente.
Para copiar um único arquivo, especifique um diretório como destino.
hadoop jar jindo-distcp-tool-${version}.jar --src /test.txt --dest oss://example-oss-bucket/tmp
Uso do --bandWidth
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Compatível |
Suporte |
--bandWidth: Limita a largura de banda que um único nó pode consumir na tarefa DistCp, em MB. Esse parâmetro evita que um nó use largura de banda excessiva.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --bandWidth 6
Uso do --codec
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Suporte |
Frequentemente, arquivos de origem são armazenados no OSS ou OSS-HDFS como texto não compactado, o que não é ideal para custos de armazenamento ou análise de dados. Use a opção --codec para armazenar dados de forma eficiente, comprimindo arquivos online.
O parâmetro --codec define o codec de compressão de arquivos. Há suporte aos codificadores gzip, gz, lzo, lzop e snappy, além das palavras-chave none e keep (padrão). As palavras-chave funcionam da seguinte forma:
none: Salva os arquivos sem compressão. Se um arquivo de origem já estiver compactado, o JindoDistCp o descompacta.keep(padrão): Copia os arquivos exatamente como estão, sem alterar seu estado de compressão.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --codec gz
Após a execução do comando, os arquivos na pasta de destino estarão compactados com o codec gz.
[root@emr-header-1 opt]# hdfs dfs -ls oss://example-oss-bucket/hourly_table/2017-02-01/03
Found 6 items
-rw-rw-rw- 1 938 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/000151.sst.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/1.log.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/2.log.gz
-rw-rw-rw- 1 1956 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/OPTIONS-000109.gz
-rw-rw-rw- 1 506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp01.txt.gz
-rw-rw-rw- 1 506 2020-04-17 20:58 oss://example-oss-bucket/hourly_table/2017-02-01/03/emp06.txt.gz
Para usar o codec lzo em um cluster Hadoop open source, instale a biblioteca nativa gplcompression e o pacote hadoop-lzo. Caso não possua o ambiente necessário, adote outro método de compressão.
Uso do --filters
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Compatível |
Suporte |
--filters: Especifique um arquivo contendo regras de filtro.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --filters filter.txt
Por exemplo, se o arquivo filter.txt contiver .*test.*, arquivos cujos caminhos incluam a string "test" não serão copiados para o OSS.
Uso do --srcPrefixesFile
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Suporte |
--srcPrefixesFile: Especifique um arquivo com regras de inclusão.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --srcPrefixesFile prefixes.txt
Se o arquivo prefixes.txt contiver .*test.*, por exemplo, apenas arquivos cujos caminhos contenham a string "test" serão copiados para o OSS.
Uso do --parallelism
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Suporte |
--parallelism: Defina o parâmetro mapreduce.job.maps para a tarefa MapReduce. Em ambientes EMR, o valor padrão é 10. Personalize esse valor conforme os recursos do seu cluster para controlar a simultaneidade da tarefa DistCp.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /opt/tmp --dest oss://example-oss-bucket/tmp --parallelism 20
Uso do --taskBatch
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Compatível |
--taskBatch: Defina quantos arquivos cada tarefa DistCp deve processar. O valor padrão é 1.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --taskBatch 1
Uso do --tmp
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Compatível |
Compatível |
--tmp: Defina um diretório temporário no HDFS para armazenar dados provisórios. O valor padrão é /tmp, correspondente a hdfs:///tmp/.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --tmp /tmp
Configure um AccessKey para acessar o OSS ou OSS-HDFS
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Suporte |
--hadoopConf: Fora de um ambiente EMR ou caso o service de acesso sem senha apresente problemas, use esta opção para fornecer um AccessKey de acesso ao OSS ou OSS-HDFS.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --hadoopConf fs.oss.accessKeyId=yourkey --hadoopConf fs.oss.accessKeySecret=yoursecret
Para evitar inserir o AccessKey repetidamente, pré-configurar o AccessKey ID e o AccessKey Secret do OSS ou OSS-HDFS no arquivo core-site.xml do Hadoop. No console EMR, adicione a seguinte configuração na página core-site.xml do service Hadoop-Common.
<configuration>
<property>
<name>fs.oss.accessKeyId</name>
<value>xxx</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>xxx</value>
</property>
</configuration>
Uso do --disableChecksum
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Suporte |
--disableChecksum: Desativa a verificação de checksum dos arquivos.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --disableChecksum
Uso do --deleteOnSuccess
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Compatível |
Compatível |
--deleteOnSuccess: Move dados em vez de copiá-los. Funciona de maneira semelhante a uma operação mv: primeiro copia os arquivos e depois os exclui da origem.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --deleteOnSuccess
Uso do --enableTransaction
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Compatível |
Suporte |
--enableTransaction: Por padrão, o JindoDistCp garante integridade no nível da tarefa. Use este parâmetro para assegurar integridade no nível do job e ativar suporte transacional entre jobs.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --enableTransaction
Uso do --ignore
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Compatível |
Suporte |
--ignore: Ignora exceções ocorridas durante a migração de dados. Erros não interrompem a tarefa; em vez disso, são reportados como valores JindoCounter. Se o CMS estiver ativado, uma notificação também é enviada.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --ignore
Uso do --diff
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Suporte |
--diff: Compara arquivos entre origem e destino. Caso um arquivo de origem não esteja sincronizado com o destino, um arquivo contendo as diferenças é gerado no diretório atual. Se sua tarefa JindoDistCp envolver compressão ou descompressão, --diff não conseguirá mostrar as diferenças corretas, pois o tamanho do arquivo muda durante o processo.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff
Quando diferenças são encontradas, um arquivo contendo essas discrepâncias é gerado no diretório atual e a seguinte mensagem é exibida:
JindoCounter
DIFF_FILES=1
Se o seu --dest for um caminho HDFS, há suporte aos formatos /path, hdfs://hostname:ip/path e hdfs://headerIp:ip/path. Os formatos hdfs:///path, hdfs:/path ou outros personalizados não são suportados.
Para verificar diferenças nos metadados dos arquivos, execute o comando --diff --preserveMeta:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --diff --preserveMeta
Uso do --update
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Suporte |
--update: Ative a sincronização incremental. Essa opção ignora arquivos e diretórios idênticos, sincronizando apenas itens novos ou modificados da origem para o destino.
Se uma tarefa JindoDistCp falhar, use este parâmetro para retomá-la do ponto de interrupção, copiando apenas os arquivos restantes. Também é possível usar esse parâmetro para copiar novos arquivos adicionados à origem após a conclusão de uma tarefa JindoDistCp anterior.
Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --update
Gravar dados no OSS nas classes de armazenamento Cold Archive, Archive ou IA
|
Versão |
OSS |
OSS-HDFS |
|
4.3.0 ou posterior |
Suporte |
Não compatível |
--policy: Defina a classe de armazenamento para dados gravados no OSS. Configure este parâmetro como Cold Archive, Archive ou IA. Sem essa especificação, os dados são gravados na classe Standard por padrão.
-
Gravar dados na classe Cold Archive (coldArchive) no OSS
Esse recurso está disponível apenas em regiões específicas. Para mais detalhes, consulte OSS storage classes. Exemplo de comando:
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy coldArchive --parallelism 20 -
Gravar dados na classe Archive (archive) no OSS
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy archive --parallelism 20 -
Gravar dados na classe IA (ia) no OSS
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-bucket/hourly_table --policy ia --parallelism 20
Uso do --preserveMeta
|
Versão |
OSS |
OSS-HDFS |
|
4.4.0 ou posterior |
Não compatível |
Compatível |
--preserveMeta: Garante que os metadados sejam migrados junto com os dados. Isso inclui Owner, Group, Permission, Atime, Mtime, Replication, BlockSize, XAttrs e ACL.
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --preserveMeta
Uso do --jobBatch
|
Versão |
OSS |
OSS-HDFS |
|
4.5.1 ou posterior |
Suporte |
Suporte |
--jobBatch: Ao gravar dados no OSS com sua tarefa DistCp, use --jobBatch para definir a quantidade de arquivos processados por cada job DistCp. O valor padrão é 10.000.
jindo-distcp-tool-${version}.jar --src /data/hourly_table --dest oss://example-oss-bucket/hourly_table --jobBatch 50000
Uso do --enableCMS
|
Versão |
OSS |
OSS-HDFS |
|
4.5.1 ou posterior |
Suporte |
Suporte |
--enableCMS: Ative o recurso de alertas do CMS .
Contadores do JindoDistCp
Os contadores do JindoDistCp resumem os resultados de uma tarefa. A tabela a seguir descreve cada contador.
|
Parâmetro |
Descrição |
|
COPY_FAILED |
Quantidade de arquivos cuja cópia falhou. |
|
CHECKSUM_DIFF |
Número de arquivos reprovados na verificação de checksum. Incluído em COPY_FAILED. |
|
FILES_EXPECTED |
Total de arquivos esperados para cópia. |
|
BYTES_EXPECTED |
Volume de bytes previstos para cópia. |
|
FILES_COPIED |
Arquivos copiados com sucesso. |
|
BYTES_COPIED |
Bytes transferidos com êxito. |
|
FILES_SKIPPED |
Arquivos ignorados durante uma atualização incremental. |
|
BYTES_SKIPPED |
Bytes não processados em uma atualização incremental. |
|
DIFF_FILES |
Arquivos divergentes entre os caminhos de origem e destino. |
|
SAME_FILES |
Arquivos idênticos entre origem e destino. |
|
DST_MISS |
Arquivos ausentes no caminho de destino. Incluído em DIFF_FILES. |
|
LENGTH_DIFF |
Arquivos com tamanhos diferentes entre origem e destino. Incluído em DIFF_FILES. |
|
CHECKSUM_DIFF |
Arquivos que falharam na validação de checksum. Incluído em DIFF_FILES. |
|
DIFF_FAILED |
Arquivos cuja operação de comparação apresentou anomalias. |