

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á.

# S3 DistCp (s3-dist-cp)
<a name="UsingEMR_s3distcp"></a>

O Apache DistCp é uma ferramenta de código aberto que você pode usar para copiar grandes quantidades de dados. *O S3 DistCp* é semelhante DistCp, mas otimizado para trabalhar AWS, especialmente com o Amazon S3. O comando para o S3 DistCp no 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. Usando o 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 o S3 DistCp para copiar dados entre buckets do Amazon S3 ou do HDFS para o Amazon S3. O S3 DistCp é mais escalável e eficiente para copiar paralelamente grandes números de objetos entre buckets e contas. AWS 

Para comandos específicos que demonstram a flexibilidade do S3DistCP em cenários do mundo real, consulte [Sete dicas para usar o S3 DistCp](https://aws.amazon.com/blogs/big-data/seven-tips-for-using-s3distcp-on-amazon-emr-to-move-data-efficiently-between-hdfs-and-amazon-s3/) no blog de Big Data. AWS 

Por exemplo DistCp, o S3 DistCp 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 [DistCpguia na documentação](http://hadoop.apache.org/docs/stable/hadoop-distcp/DistCp.html) do Apache Hadoop.

Se o S3 DistCp não conseguir 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, o S3 DistCp não limpa os arquivos parcialmente copiados. 

**Importante**  
O S3 DistCp não é compatível com nomes de bucket do Amazon S3 que contenham o caractere de sublinhado.  
O S3 DistCp não oferece suporte à concatenação de arquivos Parquet. Use PySpark em vez disso. Para obter mais informações, consulte como [concatenar arquivos do Parquet no Amazon EMR](https://aws.amazon.com/premiumsupport/knowledge-center/emr-concatenate-parquet-files/).  
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.

## Opções S3 DistCp
<a name="UsingEMR_s3distcp.options"></a>

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

Ao chamar o 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 DistCp argumentos do S3 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`   O S3 DistCp não é compatível com nomes de bucket do Amazon S3 que contenham o caractere de sublinhado.   | Sim  | 
| ‑‑dest=LOCATION  |  Destino para os dados. Isso pode ser um local do HDFS ou do Amazon S3.  Exemplo: `‑‑dest=hdfs:///output`   O S3 DistCp não é compatível com nomes de bucket do Amazon S3 que contenham o caractere de sublinhado.   | Sim  | 
| ‑‑srcPattern=PATTERN  |  Uma [expressão regular](http://en.wikipedia.org/wiki/Regular_expression) 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 (\$1), 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](http://en.wikipedia.org/wiki/Regular_expression) que faz com que o S3 concatene arquivos que correspondam DistCp à expressão. 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 DistCp etapa S3 e retornará um erro.  Se o argumento da expressão regular contiver caracteres especiais, como um asterisco (\$1), 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, o S3 DistCp tenta corresponder a esse tamanho; o tamanho real dos arquivos copiados pode ser maior ou menor 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 do S3 DistCp ao copiar para 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`, `snappy`ou `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 AWS uma chave do lado do serviço. Ao recuperar dados usando o 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).  Exemplo: `‑‑s3ServerSideEncryption`   | Não  | 
| ‑‑deleteOnSuccess  |  Se a operação de cópia for bem-sucedida, essa opção fará com que o S3 DistCp exclua os arquivos copiados 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 de um carregamento multiparte do Amazon S3. O S3 DistCp usa upload de várias partes quando copia dados maiores 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 S3. DistCp  Exemplo: `‑‑outputManifest=manifest-1.gz`   | Não  | 
| ‑‑previousManifest=PATH  |  Lê um arquivo de manifesto que foi criado durante uma chamada anterior para o S3 DistCp usando o `‑‑outputManifest` sinalizador. Quando o `‑‑previousManifest` sinalizador é definido, o S3 DistCp 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 o S3DistCp. 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` fazer com que o S3 DistCp use o arquivo de 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](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region).  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\$1REDUNDANCY. Se essa opção não for especificada, o S3 DistCp 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, o S3 não DistCp 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, o S3 DistCp implementa a [interface da ferramenta](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/util/Tool.html), o que significa que ela suporta as opções genéricas. 

## Adicionando o S3 DistCp como uma etapa em um cluster
<a name="UsingEMR_s3distcp.step"></a>

Você pode chamar o S3 DistCp adicionando-o 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 DistCp etapa do S3 a um cluster em execução. Para obter mais informações sobre como adicionar etapas a um cluster, consulte [Submit work to a cluster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html) no *Guia de gerenciamento do Amazon EMR*.

**Para adicionar uma DistCp etapa do S3 a um cluster em execução usando o AWS CLI**

Para obter mais informações sobre o uso dos comandos do Amazon EMR no AWS CLI, consulte a Referência de [AWS CLI comandos](https://docs.aws.amazon.com/cli/latest/reference/emr).
+ Para adicionar uma etapa a um cluster que chama o S3DistCp, passe os parâmetros que especificam como o S3 DistCp deve realizar 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 DistCp JAR do S3. 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](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html#emr-commandrunner-examples).
  + `Args`é uma lista separada por vírgulas dos pares nome-valor da opção a serem passados para o S3. DistCp Para obter uma lista completa das opções disponíveis, consulte [Opções S3 DistCp](#UsingEMR_s3distcp.options). 

  Para adicionar uma etapa de DistCp cópia do S3 a um cluster em execução, coloque o seguinte em um arquivo JSON salvo no Amazon S3 ou em seu sistema de arquivos local, `myStep.json` como neste exemplo. *j-3GYXXXXXX9IOK*Substitua 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
  ```

**Example 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-3GYXXXXXX9IOK*Substitua 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"        
    }
]
```