Eu quero resolver o erro “Error Code: 503 Slow Down” que faz com que meus trabalhos do S3DistCp falhem no Amazon EMR.
Resolução
Quando seus dados usam partições no estilo Apache Hive e você excede a taxa de solicitação do Amazon Simple Storage Service (Amazon S3), recebe o seguinte erro:
“mapreduce.Job: Task Id : attempt_######_0012_r_000203_0, Status : FAILED Erro: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down; Request ID: D27E827C847A8304; S3 Extended Request ID: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo=), S3 Extended Request ID: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo= at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)”
Por exemplo, os seguintes caminhos do Amazon S3 usam o mesmo prefixo, /year=2019/:
- 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
A cota de solicitações é de 3.500 solicitações de gravação ou 5.500 solicitações de leitura por segundo. Todas as operações dentro de um prefixo são contabilizadas nas cotas.
Se você não conseguir aumentar o número de partições, use uma das opções a seguir para resolver erros de controle de utilização nos trabalhos do S3DistCp.
Diminuir o número de tarefas de redução
O parâmetro mapreduce.job.reduces define o número de tarefas de redução 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 verificar o número padrão de tarefas de redução para trabalhos no seu cluster:
hdfs getconf -confKey mapreduce.job.reduces
Para definir um novo valor para mapreduce.job.reduce, execute o seguinte comando:
s3-dist-cp -Dmapreduce.job.reduces=10 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/
Observação: substitua 10 pelo número que deseja definir para tarefas de redução. Além disso, substitua todos os valores de exemplo pelos seus valores.
Aumentar a cota de tentativas do EMRFS
Por padrão, a cota de repetição do EMRFS está definida como 4.
Execute o comando a seguir para verificar a cota de tentativas do seu cluster:
hdfs getconf -confKey fs.s3.maxRetries
Para aumentar a cota de tentativas para um trabalho do s3-dist-cp, execute o seguinte comando:
s3-dist-cp -Dfs.s3.maxRetries=20 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/
Observação: substitua 20 pela cota que você deseja definir para novas tentativas. Além disso, substitua todos os valores de exemplo pelos seus valores.
Para aumentar a cota de tentativas em um novo cluster, adicione um objeto de configuração ao iniciar um cluster. Para aumentar a cota de tentativas em um cluster em execução, use o objeto de configuração para substituir a configuração do cluster para o grupo de instâncias.
Exemplo de objeto de configuração para as versões 5.21.0 e posteriores do Amazon EMR:
[
{
"Classification": "emrfs-site",
"Properties": {
"fs.s3.maxRetries": "20"
}
}
]
Quando você aumenta a cota de repetições do cluster, as aplicações Spark e Hive também podem usar a nova cota. O exemplo a seguir de sessão de shell do Spark usa a maior cota de repetição:
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”?