Comment résoudre l'erreur « Error Code: 503 Slow Down » (Code d'erreur 503 Ralentissement) sur les tâches s3-dist-cp dans Amazon EMR ?

Lecture de 3 minute(s)
0

Ma tâche S3DistCp (s3-dist-cp) sur Amazon EMR échoue en raison de la limitation d'Amazon Simple Storage Service (Amazon S3). J'obtiens un message d'erreur similaire à celui qui suit : MapReduce.Job : ID de tâche : attempt_xxxxxx_0012_r_000203_0, État : ÉCHEC Erreur : com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception : Ralentissement (service : Amazon S3 ; code d'état : 503 ; code d'erreur : 503 ralentir ; ID de demande : D27E827C847A8304 ; Demande étendue S3 Identifiant : XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo=), ID de demande étendue S3 : XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo= à l'adresse com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)

Brève description

L'erreur « Slow Down » (Ralentir) se produit lorsque vous dépassez le taux de requêtes Amazon S3 (3 500 requêtes PUT/COPY/POST/DELETE et 5 500 requêtes GET/HEAD par seconde et par préfixe dans un compartiment). Cela se produit souvent lorsque vos données utilisent des partitions de type Apache Hive. Par exemple, les chemins Amazon S3 suivants utilisent le même préfixe (/year=2019/). Cela signifie que la limite de demandes est de 3 500 demandes d'écriture ou 5 500 demandes de lecture par seconde.

  • 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

Si vous ne pouvez pas augmenter le nombre de partitions, réduisez le nombre de tâches de réducteur ou augmentez la limite de relance du EMR File System (EMRFS) pour résoudre les erreurs de limitation Amazon S3.

Solution

Utilisez l'une des options suivantes pour résoudre les erreurs de limitation sur les tâches s3-dist-cp.

Réduire le nombre de tâches de réducteur

Le paramètre mapreduce.job.reduces définit le nombre de tâches de réducteur pour la tâche. Amazon EMR définit automatiquement mapreduce.job.reduces en fonction du nombre de nœuds dans le cluster et des ressources de mémoire du cluster. Exécutez la commande suivante pour confirmer le nombre par défaut de tâches de réducteur pour les tâches de votre cluster :

$ hdfs getconf -confKey mapreduce.job.reduces

Pour définir une nouvelle valeur pour mapreduce.job.reduces, exécutez une commande similaire à ce qui suit. Cette commande définit le nombre de tâches de réducteur sur 10.

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

Augmenter la limite de relance EMRFS

Par défaut, la limite de relance EMRFS est définie sur 4. Exécutez la commande suivante pour confirmer la limite de relance pour votre cluster :

$ hdfs getconf -confKey fs.s3.maxRetries

Pour augmenter la limite de relance pour une seule tâche s3-dist-cp, exécutez une commande similaire à ce qui suit. Cette commande définit la limite de relance sur 20.

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

Pour augmenter la limite de relance sur un nouveau cluster ou un cluster en cours d'exécution :

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

Lorsque vous augmentez la limite de relance pour le cluster, les applications Spark et Hive peuvent également utiliser la nouvelle limite. Voici un exemple de séance Spark shell qui utilise la limite de relance la plus élevée :

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/")

Informations connexes

Schémas de conception des bonnes pratiques : optimisation des performances Amazon S3

Pourquoi ma tâche Spark ou Hive sur Amazon EMR échoue-t-elle avec une exception AmazonS3Exception HTTP 503 « Slow Down (Ralentir) » ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans