View a markdown version of this page

S3DistCp (s3-dist-cp) - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

S3DistCp (s3-dist-cp)

O Apache DistCp é uma ferramenta de código aberto que você pode usar para copiar grandes quantidades de dados. S3DistCpé semelhante ao Amazon S3 DistCp, mas otimizado para trabalhar com AWS ele. O comando do Amazon EMR versão 4.0 e posterior és3-dist-cp, que você adiciona como uma etapa em um cluster ou na linha de comando. S3DistCp Usando S3DistCp, você pode copiar com eficiência grandes quantidades de dados do Amazon S3 para o HDFS, onde eles podem ser processados por etapas subsequentes em seu cluster do Amazon EMR. Você também pode usar S3DistCp para copiar dados entre buckets do Amazon S3 ou do HDFS para o Amazon S3. S3DistCp é mais escalável e eficiente para copiar paralelamente um grande número de objetos em compartimentos e contas. AWS

Para comandos específicos que demonstram a flexibilidade do S3DistCp em cenários reais, consulte Sete dicas de uso S3DistCp no blog Big Data. AWS

Por exemplo DistCp, S3DistCp usa MapReduce para copiar de forma distribuída. Ele compartilha a cópia, o tratamento de erros, a recuperação e as tarefas de relatórios com vários servidores. Para obter mais informações sobre o projeto de código DistCp aberto Apache, consulte o DistCp guia na documentação do Apache Hadoop.

Se não S3DistCp for possível copiar alguns ou todos os arquivos especificados, a etapa do cluster falhará e retornará um código de erro diferente de zero. Se isso ocorrer, S3DistCp não limpa os arquivos parcialmente copiados.

Importante

S3DistCp não oferece suporte a nomes de bucket do Amazon S3 que contenham o caractere sublinhado.

S3DistCp não suporta concatenação para arquivos Parquet. Use PySpark em vez disso. Para obter mais informações, consulte como concatenar arquivos do Parquet no Amazon EMR.

Para evitar erros de cópia ao usar o S3DistCP para copiar um único arquivo (em vez de um diretório) do S3 para o HDFS, use o Amazon EMR versão 5.33.0 ou posterior ou o Amazon EMR versão 6.3.0 ou posterior.

S3DistCp opções

Embora semelhante ao DistCp, S3DistCp oferece suporte a um conjunto diferente de opções para alterar a forma como ele copia e compacta dados.

Ao ligar S3DistCp, você pode especificar as opções descritas na tabela a seguir. As opções são adicionadas à etapa, usando-se a lista de argumentos. Exemplos dos S3DistCp argumentos são mostrados na tabela a seguir.

Opção Description Obrigatório
--src=LOCATION

Local dos dados a serem copiados. Isso pode ser um local do HDFS ou do Amazon S3.

Exemplo: --src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node

Importante

S3DistCp não oferece suporte a nomes de bucket do Amazon S3 que contenham o caractere sublinhado.

Sim
--dest=LOCATION

Destino para os dados. Isso pode ser um local do HDFS ou do Amazon S3.

Exemplo: --dest=hdfs:///output

Importante

S3DistCp não oferece suporte a nomes de bucket do Amazon S3 que contenham o caractere sublinhado.

Sim
--srcPattern=PATTERN

Uma expressão regular que filtra a operação de cópia para um subconjunto dos dados em --src. Se nenhum --srcPattern nem --groupBy for especificado, todos os dados em --src serão copiados em --dest.

Se o argumento da expressão regular contiver caracteres especiais, como um asterisco (*), a expressão regular ou a string --args inteira deverá ser colocada entre aspas simples (').

Exemplo: --srcPattern=.*daemons.*-hadoop-.*

Não
--groupBy=PATTERN

Uma expressão regular que faz com que os arquivos correspondentes S3DistCp à expressão sejam concatenados. Por exemplo, você pode usar essa opção para combinar todos os arquivos de log gravados em uma hora em um único arquivo. O nome do arquivo concatenado é o valor correspondido pela expressão regular para o agrupamento.

Parênteses indicam como os arquivos devem ser agrupados, com todos os itens que correspondam à instrução parentética sendo combinados em um único arquivo de saída. Se a expressão regular não incluir uma declaração entre parênteses, o cluster falhará na S3DistCp etapa e retornará um erro.

Se o argumento da expressão regular contiver caracteres especiais, como um asterisco (*), a expressão regular ou a string --args inteira deverá ser colocada entre aspas simples (').

Quando --groupBy for especificado, somente os arquivos que correspondam ao padrão especificado serão copiados. Não é necessário especificar --groupBy e --srcPattern ao mesmo tempo.

Exemplo: --groupBy=.*subnetid.*([0-9]+-[0-9]+-[0-9]+-[0-9]+).*

Não
--targetSize=SIZE

O tamanho, em mebibytes (MiB), dos arquivos a serem criados com base na opção --groupBy. Esse valor deve ser um número inteiro. Quando --targetSize definido, S3DistCp tenta corresponder a esse tamanho; o tamanho real dos arquivos copiados pode ser maior ou menor do que esse valor. Os trabalhos são agregados com base no tamanho do arquivo de dados, portanto, é possível que o tamanho do arquivo de destino corresponda ao tamanho do arquivo de dados de origem.

Se os arquivos concatenados pelo --groupBy forem maiores que o valor do --targetSize, eles serão divididos em arquivos de parte e nomeados sequencialmente com um valor numérico anexado ao final. Por exemplo, um arquivo concatenado em myfile.gz seria dividido em partes como: myfile0.gz, myfile1.gz etc.

Exemplo: --targetSize=2

Não
--appendToLastFile

Especifica o comportamento S3DistCp ao copiar arquivos do Amazon S3 para o HDFS que já estão presentes. Ele acrescenta novos dados de arquivos aos arquivos existentes. Se você usar --appendToLastFile com --groupBy, novos dados serão anexados aos arquivos que correspondam aos mesmos grupos. Essa opção também respeita o comportamento --targetSize quando usada com --groupBy.

Não
--outputCodec=CODEC

Especifica o codec de compactação a ser usado para os arquivos copiados. Isso pode ter os valores: gzip, gz, lzo, snappyou none. Você pode usar essa opção, por exemplo, para converter arquivos de entrada compactados com Gzip em arquivos de saída com compactação LZO ou para descompactar os arquivos como parte da operação de cópia. Se você selecionar um codec de saída, o nome do arquivo será anexado com a extensão apropriada (por exemplo, para gz e gzip, a extensão é .gz) Se você não especificar um valor para --outputCodec, os arquivos serão copiados sem alterações na compactação.

Exemplo: --outputCodec=lzo

Não
--s3ServerSideEncryption

Garante que os dados de destino sejam transferidos usando SSL e criptografados automaticamente no Amazon S3 usando uma chave do lado do AWS serviço. Ao recuperar dados usando S3DistCp, os objetos são automaticamente descriptografados. Se você tentar copiar um objeto não criptografado em um bucket do Amazon S3 que exige criptografia, haverá falha na operação. Para obter mais informações, consulte Proteger dados com criptografia.

Exemplo: --s3ServerSideEncryption

Não
--deleteOnSuccess

Se a operação de cópia for bem-sucedida, essa opção fará com S3DistCp que os arquivos copiados sejam excluídos do local de origem. Isso é útil se você estiver copiando arquivos de saída, como arquivos de log, de um local para outro como uma tarefa programada e não quiser copiar os mesmos arquivos duas vezes.

Exemplo: --deleteOnSuccess

Não
--disableMultipartUpload

Desativa o uso do multipart upload.

Exemplo: --disableMultipartUpload

Não
--multipartUploadChunkSize=SIZE

O tamanho, em MiB, de cada parte em um upload de várias partes do Amazon S3. S3DistCp usa o upload de várias partes quando copia dados maiores do que o. multipartUploadChunkSize Para melhorar a performance do trabalho, você pode aumentar o tamanho de cada parte. O tamanho padrão é 128 MiB.

Exemplo: --multipartUploadChunkSize=1000

Não
--numberFiles

Precede os arquivos de saída com números sequenciais. A contagem inicia em 0, a menos que um valor diferente seja especificado por --startingIndex.

Exemplo: --numberFiles

Não
--startingIndex=INDEX

Usado com --numberFiles para especificar o primeiro número na sequência.

Exemplo: --startingIndex=1

Não
--outputManifest=FILENAME

Cria um arquivo de texto, compactado com Gzip, que contém uma lista de todos os arquivos copiados pelo. S3DistCp

Exemplo: --outputManifest=manifest-1.gz

Não
--previousManifest=PATH

Lê um arquivo de manifesto que foi criado durante uma chamada anterior para S3DistCp usar o --outputManifest sinalizador. Quando o --previousManifest sinalizador é definido, S3DistCp exclui os arquivos listados no manifesto da operação de cópia. Se --outputManifest for especificado juntamente com --previousManifest, os arquivos listados no manifesto anterior também aparecerão no novo arquivo manifesto, embora os arquivos não sejam copiados.

Exemplo: --previousManifest=/usr/bin/manifest-1.gz

Não
--requirePreviousManifest

Requer um manifesto anterior criado durante uma chamada anterior para S3DistCp o. Se isso for definido como falso, nenhum erro será gerado quando um manifesto anterior não for especificado. O padrão é true.

Não
--copyFromManifest

Inverte o comportamento de --previousManifest S3DistCp fazer com que use o arquivo manifesto especificado como uma lista de arquivos a serem copiados, em vez de uma lista de arquivos a serem excluídos da cópia.

Exemplo: --copyFromManifest --previousManifest=/usr/bin/manifest-1.gz

Não
--s3Endpoint=ENDPOINT

Especifica o endpoint do Amazon S3 a ser usado ao carregar um arquivo. Essa opção define o endpoint para a origem e o destino. Se não estiver definido, o endpoint padrão será s3.amazonaws.com. Para obter uma lista dos endpoints do Amazon S3, consulte Regions and endpoints.

Exemplo: --s3Endpoint=s3.eu-west-1.amazonaws.com

Não
--storageClass=CLASS

A classe de armazenamento a ser usada quando o destino é o Amazon S3. Os valores válidos são STANDARD e REDUCED_REDUNDANCY. Se essa opção não for especificada, S3DistCp tentará preservar a classe de armazenamento.

Exemplo: --storageClass=STANDARD

Não
--srcPrefixesFile=PATH

um arquivo de texto no Amazon S3 (s3://), HDFS (hdfs:///) ou sistema de arquivos local (arquivo:/) que contém uma lista de prefixos src, um prefixo por linha.

Se srcPrefixesFile for fornecido, não S3DistCp listará o caminho src. Em vez disso, ele gerará uma lista de fontes como resultado combinado da listagem de todos os prefixos especificados nesse arquivo. O caminho relativo em comparação com o caminho src, em vez desses prefixos, será usado para gerar os caminhos de destino. Se srcPattern também for especificado, ele será aplicado à lista de resultados combinados dos prefixos de origem para filtrar ainda mais a entrada. Se copyFromManifest for usado, os objetos no manifesto serão copiados e srcPrefixesFile será ignorado.

Exemplo: --srcPrefixesFile=PATH

Não

Além das opções acima, S3DistCp implementa a interface Tool, o que significa que ela suporta as opções genéricas.

Adicionar S3DistCp como uma etapa em um cluster

Você pode chamar S3DistCp adicionando-a como uma etapa em seu cluster. As etapas podem ser adicionadas a um cluster na inicialização ou a um cluster em execução usando-se o console, a CLI ou a API. Os exemplos a seguir demonstram a adição de uma S3DistCp etapa a um cluster em execução. Para obter mais informações sobre como adicionar etapas a um cluster, consulte Submit work to a cluster no Guia de gerenciamento do Amazon EMR.

Para adicionar uma S3DistCp etapa a um cluster em execução usando o AWS CLI

Para obter mais informações sobre o uso de comandos do Amazon EMR no AWS CLI, consulte a Referência de AWS CLI comandos.

  • Para adicionar uma etapa a um cluster que chama S3DistCp, transmita os parâmetros que especificam como S3DistCp executar a operação de cópia como argumentos.

    O exemplo a seguir copia logs do daemon do Amazon S3 para hdfs:///output. No comando a seguir:

    • --cluster-id especifica o cluster

    • Jaré a localização do arquivo S3DistCp JAR. Para ver um exemplo de como executar um comando em um cluster usando command-runner.jar, consulte Submit a custom JAR step to run a script or command.

    • Argsé uma lista separada por vírgulas dos pares nome-valor da opção para a qual passar. S3DistCp Para obter uma lista completa das opções disponíveis, consulte S3DistCp opções.

    Para adicionar uma etapa de S3DistCp cópia a um cluster em execução, coloque o seguinte em um arquivo JSON salvo no Amazon S3 ou em seu sistema de arquivos local, como neste myStep.json exemplo. j-3GYXXXXXX9IOKSubstitua pelo ID do cluster e amzn-s3-demo-bucket substitua pelo nome do bucket do Amazon S3.

    [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com","--src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","--dest=hdfs:///output","--srcPattern=.*[a-zA-Z,]+"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]
    aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps file://./myStep.json
exemplo Copiar arquivos de log do Amazon S3 para o HDFS

Este exemplo também ilustra como copiar arquivos de log armazenados em um bucket do Amazon S3 no HDFS, adicionando-se uma etapa a um cluster em execução. Neste exemplo, a opção --srcPattern é usada para limitar os dados copiados para os logs do daemon.

Para copiar os arquivos de log do Amazon S3 para o HDFS usando a opção --srcPattern, coloque o seguinte em um arquivo JSON salvo no Amazon S3 ou seu sistema de arquivos local como myStep.json para este exemplo. j-3GYXXXXXX9IOKSubstitua pelo ID do cluster e amzn-s3-demo-bucket substitua pelo nome do bucket do Amazon S3.

[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com","--src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","--dest=hdfs:///output","--srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]