Como soluciono o problema “Código de erro: 503 Desacelerar" em trabalhos s3-dist-cp no Amazon EMR?

3 minuto de leitura
0

Meu trabalho S3DistCp (s3-dist-cp) no trabalho do Amazon EMR falha devido ao controle de utilização do Amazon Simple Storage Service (Amazon S3). Recebo uma mensagem de erro semelhante à seguinte: mapreduce.Job: ID da tarefa: attempt_xxxxxx_0012_r_000203_0, Status: FAILED Erro: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Desacelerar (serviço: Amazon S3; Código de status: 503; Código de erro: 503 Desacelerar; ID da solicitação: D27E827C847A8304; de solicitação estendida do S3: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo=), ID da solicitação estendida do S3: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo= at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)

Breve descrição

Erros de “desaceleração” ocorrem quando você excede a taxa de solicitação do Amazon S3 (3.500 solicitações PUT/COPY/POST/DELETE e 5.500 solicitações GET/HEAD por segundo por prefixo em um bucket). Isso geralmente acontece quando seus dados usam partições ao estilo Apache Hive. Por exemplo, os seguintes caminhos do Amazon S3 usam o mesmo prefixo (/year=2019/). Isso significa que o limite de solicitações é de 3.500 solicitações de gravação ou 5.500 solicitações de leitura por segundo.

  • s3://awsexamplebucket/year=2019/month=11/day=01/mydata.parquet
  • s3://awsexamplebucket/year=2019/month=11/day=02/mydata.parquet
  • s3://awsexamplebucket/year=2019/month=11/day=03/mydata.parquet

Se aumentar o número de partições não for uma opção, reduza o número de tarefas redutoras ou aumente o limite de novas tentativas do Sistema de arquivos do EMR (EMRFS) para resolver erros de controle de utilização do Amazon S3.

Resolução

Use uma das opções a seguir para resolver erros de controle de utilização em trabalhos s3-dist-cp.

Diminuir o número de reduções

O parâmetro mapreduce.job.reduces define o número de reduções para o trabalho. O Amazon EMR define automaticamente mapreduce.job.reduce com base no número de nós no cluster e nos recursos de memória do cluster. Execute o comando a seguir para confirmar o número padrão de reduções para trabalhos no seu cluster:

$ hdfs getconf -confKey mapreduce.job.reduces

Para definir um novo valor para mapreduce.job.reduce, execute um comando semelhante ao seguinte. Esse comando define o número de reduções como 10.

$ s3-dist-cp -Dmapreduce.job.reduces=10 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/

Aumentar o limite de novas tentativas do EMRFS

Por padrão, o limite de repetição do EMRFS está definido como 4. Execute o comando a seguir para confirmar o limite de novas tentativas para seu cluster:

$ hdfs getconf -confKey fs.s3.maxRetries

Para aumentar o limite de novas tentativas para um único trabalho s3-dist-cp, execute um comando semelhante ao seguinte. Esse comando define o limite de novas tentativas como 20.

$ s3-dist-cp -Dfs.s3.maxRetries=20 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/

Para aumentar o limite de repetições em um cluster novo ou em execução:

[
    {
      "Classification": "emrfs-site",
      "Properties": {
        "fs.s3.maxRetries": "20"
      }
    }
]

Quando você aumenta o limite de repetições para o cluster, as aplicações Spark e Hive também podem usar o novo limite. Aqui está um exemplo de uma sessão de shell Spark que usa o limite maior de repetições:

spark> sc.hadoopConfiguration.set("fs.s3.maxRetries", "20")
spark> val source_df = spark.read.csv("s3://awsexamplebucket/data/")
spark> source_df.write.save("s3://awsexamplebucket2/output/")

Informações relacionadas

Padrões de projeto com práticas recomendadas: otimização da performance do Amazon S3

Por que meu trabalho do Spark ou Hive no Amazon EMR falha com uma AmazonS3Exception HTTP 503 “Desacelerar”?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos