S3 DistCp (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á.

S3 DistCp (s3-dist-cp)

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 S3 DistCp na 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 HDFS para onde eles podem ser processados por etapas subsequentes em seu cluster da AmazonEMR. Você também pode usar o S3 DistCp para copiar dados entre buckets do Amazon S3 ou do HDFS 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 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 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 limpará 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 Concatenação de arquivos de parquete na 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, HDFS use a Amazon EMR versão 5.33.0 ou posterior, ou a Amazon versão 6.3.0 ou posterior. EMR

Opções do S3 DistCp

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 Descrição Obrigatório
‑‑src=LOCATION

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

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

Importante

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 HDFS ou o Amazon S3.

Exemplo: ‑‑dest=hdfs:///output

Importante

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 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 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 (*), 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 que já estão HDFS 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 LZO compactação 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 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.

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.

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, 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 (file:/) que contém uma lista de src prefixos, 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, o que significa que ela suporta as opções genéricas.

Adicionando o S3 DistCp como uma etapa em um cluster

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 o console,CLI, ouAPI. 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 Enviar trabalho para um cluster no Amazon EMR Management Guide.

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 EMR comandos da Amazon no AWS CLI, consulte a Referência de AWS CLI comandos.

  • 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 DistCp JAR arquivo S3. Para ver um exemplo de como executar um comando em um cluster usando o command-runner.jar, consulte Enviar uma JAR etapa personalizada para executar um script ou comando.

    • 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 do S3 DistCp .

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

    [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://mybucket/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 HDFS

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

Para copiar arquivos de log do Amazon S3 para HDFS usar a ‑‑srcPattern opção, coloque o seguinte em um JSON arquivo salvo no Amazon S3 ou em seu sistema de arquivos local, myStep.json como neste exemplo. Substituir j-3GYXXXXXX9IOK com seu ID de cluster e substitua mybucket com o nome do seu bucket do Amazon S3.

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