Come faccio a risolvere l'errore "HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://awsdoc-example-bucket/: Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down;" in Athena?

6 minuti di lettura
0

La mia query su Amazon Athena ha esito negativo e presenta uno dei seguenti errori: "HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://awsdoc-example-bucket/date=2020-05-29/ingest_date=2020-04-25/part-00000.snappy.parquet (offset=0, length=18614): Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down;" oppure "Unknown Failure (status code = 1003, java.sql.SQLException: [Simba]AthenaJDBC An error has been thrown from the AWS Athena client.HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://awsdoc-example-bucket/date=2020-05-29/ingest_date=2020-04-25/part-00000.snappy.parquet (offset=0, length=18614): Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down;"

Descrizione breve

Un bucket Amazon Simple Storage Service (Amazon S3) può gestire 3.500 richieste PUT/COPY/POST/DELETE o 5.500 richieste GET/HEAD al secondo per prefisso in un bucket. Questi errori si verificano quando viene superata questa soglia di richiesta. So tratta di un limite combinato per tutti gli utenti e i servizi di un account.

Per impostazione predefinita, Amazon S3 si ridimensiona automaticamente per supportare tassi di richieste molto elevati. Quando la frequenza delle richieste aumenta, il bucket S3 viene automaticamente partizionato per supportare tassi di richiesta più elevati. Tuttavia, se la soglia di richiesta viene superata, riceverai un errore 5xx che chiede di rallentare o riprovare più tardi.

Ad esempio, il prefisso s3://my-athena-bucket/month=jan/ può supportare solo 3.500 richieste PUT/COPY/POST/DELETE al secondo o 5.500 richieste GET/HEAD al secondo. Se hai 10.000 file all'interno di questo prefisso ed esegui una query Athena su di esso, ricevi l'errore 503 Slow Down. Questo perché Athena tenta di leggere tutti i 10.000 file del prefisso contemporaneamente utilizzando le richieste GET/HEAD, ma il prefisso può supportare solo fino a 5.500 richieste GET/HEAD al secondo. Ciò può causare la limitazione delle richieste S3 e causare l'errore 503 Slow Down.

Risoluzione

Usa uno o più dei seguenti metodi per impedire la limitazione delle richieste:

Distribuisci oggetti e richieste S3 tra più prefissi

Il partizionamento dei dati può aiutare a distribuire gli oggetti e le richieste tra più prefissi. Evita di archiviare molti file con un unico prefisso S3. Prendi in considerazione l'utilizzo di più prefissi in modo da poter distribuire gli oggetti S3 tra questi prefissi. Partizionando i dati, è possibile ridurre la quantità di dati scansionati da ogni query. Per ulteriori informazioni, consulta Partizionare i dati.

Ad esempio, invece di archiviare tutti i file in s3://my-athena-bucket/my-athena-data-files, partiziona i dati e memorizzali con i seguenti prefissi individuali:

s3://my-athena-bucket/jan

s3://my-athena-bucket/feb

s3://my-athena-bucket/mar

I dati in questi file possono essere ulteriormente partizionati per aumentare la distribuzione degli oggetti (esempio: s3://my-athena-bucket/jan/01).

Per ulteriori informazioni sulla struttura delle cartelle di partizione Athena da scegliere, consulta Suggerimenti e trucchi sulle prestazioni di Amazon S3.

Ridurre il numero di file in ogni prefisso

Potresti ricevere questo errore quando esegui una query su un bucket S3 con un numero elevato di oggetti di piccole dimensioni. Ad esempio, se in un bucket S3 c'è un file da 100 MB, Athena deve effettuare 1 richiesta GET per leggere il file. Tuttavia, se ci sono 1.000 file da 100 KB ciascuno, Athena deve effettuare 1.000 richieste GET per leggere gli stessi 100 MB di dati. Di conseguenza, le richieste superano i limiti delle richieste S3.

Per ridurre il numero di richieste Amazon S3, riduci il numero di file. Ad esempio, usa lo strumento S3DistCp per unire un numero elevato di file di piccole dimensioni (inferiori a 128 MB) in un numero minore di file di grandi dimensioni. Per ulteriori informazioni, consulta I 10 migliori suggerimenti per l'ottimizzazione delle prestazioni per Amazon Athena e controlla la sezione 4. Ottimizza le dimensioni dei file.

Esempio

s3-dist-cp --src=s3://my_athena_bucket_source/smallfiles/ --dest=s3://my_athena_bucket_target/largefiles/ --groupBy='.*(.csv)'

Assicurati di sostituire quanto segue nel comando precedente:

  • my_athena_bucket_source con il bucket S3 di origine in cui esistono i file di piccole dimensioni.
  • my_athena_bucket_target con il bucket S3 di destinazione in cui verrà archiviato l'output.

È possibile utilizzare l'opzione GroupBy per aggregare file di piccole dimensioni in un numero inferiore di file di grandi dimensioni della dimensione desiderata. Ciò consente di ottimizzare sia prestazioni e costi delle query.

**Nota:**S3Distcp non supporta la concatenazione per i file Parquet. Usa invece PySpark. Per ulteriori informazioni, consulta Come faccio a concatenare i file Parquet in Amazon EMR?

Verifica che il controllo delle versioni sia abilitato per il tuo bucket S3

Quando elimini oggetti da un bucket abilitato alla versione, Amazon S3 inserisce un indicatore di eliminazione invece di rimuovere l'oggetto in modo permanente. Se hai molti file con indicatori di eliminazione nel tuo bucket S3, potresti ricevere questo errore. Quando esegui una query su un bucket abilitato alla versione, Athena deve controllare le diverse versioni di ciascun oggetto. Quindi, Athena decide se includere un particolare oggetto durante l'elaborazione della query.

Per risolvere questo errore, valuta la possibilità di rimuovere gli indicatori di eliminazione dal tuo bucket S3. È possibile rimuovere gli indicatori di eliminazione effettuando una delle seguenti operazioni:

Controlla se altre applicazioni utilizzano lo stesso prefisso S3

Usa la metrica Amazon CloudWatch 5xxErrors e i log di accesso al server S3 per verificare se altre applicazioni, come Hive on EMR, Spark o AWS Glue, utilizzavano lo stesso prefisso S3 quando hai eseguito la query Athena. Più applicazioni che tentano di leggere i dati dallo stesso prefisso S3 possono comportare la limitazione delle richieste e il fallimento delle query con l'errore Slow Down. Evita di pianificare l'accesso contemporaneo di più applicazioni allo stesso prefisso. Inoltre, utilizza prefissi S3 diversi per l'origine dati Athena e l'origine dati dell'applicazione.

Puoi creare una configurazione dei parametri di CloudWatch per tutti gli oggetti nel tuo bucket S3. Usa queste metriche per monitorare le metriche della frequenza di chiamata dell'API per un prefisso specifico in un determinato momento. L'abilitazione delle metriche delle richieste S3 per un prefisso può aiutare a comprendere il tasso di successo complessivo dell'API per un prefisso in un determinato momento. È possibile utilizzare queste informazioni insieme ai log di accesso al server S3 per scoprire quale applicazione stava utilizzando la chiamata API per il prefisso.


Informazioni correlate

Come faccio ad aumentare i limiti delle richieste di Amazon S3 per evitare una limitazione sul mio bucket Amazon S3?

Risoluzione dei problemi in Athena

Ottimizzazione delle prestazioni in Athena

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa