Comment puis-je corriger l’erreur de requête Athena « HIVE_CANNOT_OPEN_SPLIT » ?

Lecture de 6 minute(s)
0

Ma requête Amazon Athena a échoué avec l’erreur « HIVE_CANNOT_OPEN_SPLIT ».

Brève description

Un compartiment Amazon Simple Storage Service (Amazon S3) ne peut prendre en charge que 3 500 requêtes PUT/COPY/POST/DELETE ou 5 500 requêtes GET/HEAD par seconde et par préfixe dans un compartiment. Cette limite stricte s’applicable de manière pour tous les utilisateurs et services d’un compte AWS combinés. 

Par défaut, Amazon S3 évolue automatiquement pour prendre en charge des taux de demandes élevés. Lorsque votre taux de demandes augmente, votre compartiment S3 est partitionné automatiquement pour prendre en charge des taux de demandes plus élevés. Cependant, si le seuil de demandes est dépassé, le message d’erreur « 5xx Slow Down » s’affiche.

Par exemple : vous exécutez une requête Athena sur un préfixe contenant 10 000 fichiers. Athena a utilisé les requêtes GET/HEAD pour essayer de lire les 10 000 fichiers en même temps. Cependant, comme le préfixe ne prend en charge que 5 500 requêtes GET/HEAD par seconde, vos requêtes S3 sont limitées et vous recevez l’erreur « 5xx Slow Down ».

Résolution

Utilisez une ou plusieurs des méthodes suivantes pour que les requêtes ne soient pas limitées.

Répartir les objets et les requêtes S3 entre plusieurs préfixes

Pour vous aider à répartir les objets et les requêtes entre plusieurs préfixes, partitionnez vos données. Ne stockez pas un grand nombre de fichiers sous un seul préfixe S3. Au lieu de cela, utilisez plusieurs préfixes pour répartir les objets S3 entre ces préfixes. Pour en savoir plus, consultez la page Partitionnement de données dans Athena.

Par exemple, ne stockez pas tous les fichiers sous s3://my-athena-bucket/my-athena-data-files. Au lieu de cela, partitionnez les données et stockez-les sous les préfixes individuels suivants :

s3://my-athena-bucket/jan

s3://my-athena-bucket/feb

s3://my-athena-bucket/mar

Vous pouvez partitionner davantage les données de ces fichiers pour augmenter la distribution d’objets tels que s3://my-athena-bucket/jan/01.

Réduire le nombre de fichiers dans chaque préfixe

L’erreur « HIVE_CANNOT_OPEN_SPLIT » peut s’afficher lorsque vous interrogez un compartiment S3 contenant un grand nombre de petits objets. Par exemple, s’il existe un fichier de 100 Mo dans un compartiment S3, Athena doit effectuer une requête GET pour lire le fichier. Cependant, pour 1 000 fichiers de 100 Ko chacun, Athena doit effectuer 1 000 requêtes GET pour lire les mêmes 100 Mo de données. Les demandes dépassent alors les limites de requêtes S3.

Pour réduire le nombre de requêtes Amazon S3, réduisez le nombre de fichiers. Par exemple, utilisez l’outil S3DistCp pour fusionner un grand nombre de petits fichiers de moins de 128 Mo en un plus petit nombre de fichiers volumineux. Pour en savoir plus, consultez la section **Optimize file sizes de la page **Top 10 performance tuning tips for Amazon Athena.

Exemple de commande :

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

Remarque : dans la commande précédente, remplacez my_athena_bucket_source par le compartiment S3 source dans lequel se trouvent les petits fichiers. Remplacez également my_athena_bucket_target par le compartiment S3 de destination dans lequel la sortie est stockée.

Pour optimiser les performances et les coûts des requêtes, utilisez l’option groupBy pour regrouper les petits fichiers dans un nombre réduit de fichiers volumineux.

Remarque : S3DistCp ne prend pas en charge la concaténation pour les fichiers Apache Parquet. Utilisez PySpark à la place. Pour en savoir plus, consultez la page Comment puis-je concaténer des fichiers Parquet dans Amazon EMR ?

Vérifier si la gestion des versions est activée pour votre compartiment S3

Lorsque vous supprimez des objets dans un compartiment S3 qui utilise la gestion des versions, Amazon S3 ne supprime pas définitivement l’objet. Au lieu de cela, Amazon S3 insère un marqueur de suppression. Si de nombreux fichiers de votre compartiment S3 comportent des marqueurs de suppression, l’erreur « HIVE_CANNOT_OPEN_SPLIT » peut s’afficher. Lorsque vous exécutez une requête sur un compartiment pour lequel la gestion des versions est activée, Athena doit vérifier les différentes versions de chaque objet. Au fur et à mesure du traitement de la requête, Athéna décide d’inclure ou non chaque objet spécifique.

Pour résoudre ce problème, supprimez les marqueurs de suppression de votre compartiment S3. Pour supprimer les marqueurs de suppression, effectuez l’une des actions suivantes :

Vérifier si d’autres applications utilisent le même préfixe S3

Utilisez la métrique Amazon CloudWatch 5xxErrors et les journaux d’accès au serveur S3 pour vérifier si d’autres applications utilisaient le même préfixe S3 lorsque vous avez exécuté la requête Athena. Plusieurs applications qui tentent de lire les données à partir du même préfixe S3 peuvent entraîner une limite de requêtes. Ne programmez pas d’applications qui accèdent au même préfixe en même temps. Utilisez également des préfixes S3 différents pour la source de données Athena et la source de données de l’application.

Créez une configuration de métriques CloudWatch pour tous les objets de votre compartiment S3. Utilisez ces métriques pour surveiller les mesures de taux d’appels d’API pour un préfixe spécifique à un moment donné. Activez les métriques de requête S3 pour un préfixe afin de comprendre le taux global d’appels d’API pour un préfixe à un moment donné. Utilisez ces informations en parallèle des journaux d’accès au serveur S3 pour trouver l’application qui a utilisé l’appel d’API pour le préfixe.

Pour partitionner vos données au sein d’une seule partition, vous pouvez également compartimenter vos données. Pour en savoir plus, consultez la page Qu’est-ce que la compartimentation ?

Informations connexes

Comment puis-je résoudre une erreur HTTP 500 ou 503 depuis Amazon S3 ?

Résolution des problèmes dans Athena

Performance tuning in Athena

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an