Come posso risolvere il problema "Codice di errore: 503 Slow Down" sui lavori s3-dist-cp in Amazon EMR?

3 minuti di lettura
0

Il mio job S3DistCp (s3-dist-cp) su Amazon EMR non funziona a causa della limitazione di velocità di Amazon Simple Storage Service (Amazon S3). Ricevo un messaggio di errore simile al seguente: MapReduce.job: Id attività : attempt_xxxxxx_0012_r_000203_0, stato : Errore NON RIUSCITO: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Rallentamento (servizio: Amazon S3; codice di stato: 503; Codice di errore: 503 Slow Down; ID richiesta: D27E827C847A8304; ID richiesta estesa S3: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo=), ID richiesta estesa S3: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo= at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)

Breve descrizione

Gli errori "Slow Down" si verificano quando superi la velocità di richiesta di Amazon S3 (3.500 richieste PUT/COPY/POST/DELETE e 5.500 GET/HEAD al secondo per prefisso in un bucket). Questo accade spesso quando i dati utilizzano partizioni in stile Apache Hive. Ad esempio, i seguenti percorsi Amazon S3 utilizzano lo stesso prefisso (/year=2019/). Ciò significa che il limite di richieste è di 3.500 richieste di scrittura o 5.500 richieste di lettura al secondo.

  • 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 non è possibile aumentare il numero di partizioni, riduci il numero di attività di riduzione o aumenta il limite di tentativi di EMR File System (EMRFS) per risolvere gli errori di limitazione di Amazon S3.

Risoluzione

Usa una delle seguenti opzioni per risolvere gli errori di limitazione sui job s3-dist-cp.

Ridurre il numero di riduzioni

Il parametro mapreduce.job.reduces imposta il numero di riduzioni per il lavoro. Amazon EMR imposta automaticamente mapreduce.job.reduces in base al numero di nodi nel cluster e alle risorse di memoria del cluster. Esegui il comando seguente per confermare il numero predefinito di riduzioni per i lavori nel tuo cluster:

$ hdfs getconf -confKey mapreduce.job.reduces

Per impostare un nuovo valore per mapreduce.job.reduces, esegui un comando simile al seguente. Questo comando imposta il numero di riduzioni a 10.

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

Aumenta il limite di tentativi EMRFS

Per impostazione predefinita, il limite di tentativi EMRFS è impostato su 4. Esegui il comando seguente per confermare il limite di tentativi per il tuo cluster:

$ hdfs getconf -confKey fs.s3.maxRetries

Per aumentare il limite di tentativi per un singolo job s3-dist-cp, esegui un comando simile al seguente. Questo comando imposta il limite di tentativi a 20.

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

Per aumentare il limite di tentativi su un cluster nuovo o in esecuzione:

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

Quando aumenti il limite di tentativi per il cluster, anche le applicazioni Spark e Hive possono utilizzare il nuovo limite. Ecco un esempio di sessione di una shell Spark che utilizza il limite di tentativi più alto:

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

Informazioni correlate

Modelli di progettazione basati sulle best practice: ottimizzazione delle prestazioni di Amazon S3

Perché il mio processo Spark o Hive su Amazon EMR fallisce con un HTTP 503 “Slow Down” AmazonS3Exception?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa