Selon limitations AWS Athena vous pouvez soumettre jusqu'à 20 requêtes du même type à la fois, mais il s'agit d'une limite souple et peut être augmentée sur demande. J'utilise boto3
pour interagir avec Athena et mon script soumet 16 requêtes CTAS dont chacune prend environ 2 minutes pour se terminer. Dans un compte AWS, seul moi utilise le service Athena. Cependant, lorsque je regarde l'état des requêtes via la console, je constate que seules quelques-unes des requêtes (5 en moyenne) sont réellement exécutées malgré qu'elles soient toutes dans l'état Running
. Voici ce que l'on verrait normalement dans l'onglet Hisotry d'Athéna:
Je comprends qu'après avoir soumis des requêtes à Athena, il traite les requêtes en affectant des ressources en fonction de la charge de service globale et du nombre de demandes entrantes. Mais j'ai essayé de les exécuter à différents jours et heures, mais j'obtiendrais toujours environ 5 requêtes en cours d'exécution en même temps.
Donc, ma question est la suivante: comment cela devrait-il être? Si c'est le cas, quel est l'intérêt de pouvoir soumettre jusqu'à 20 requêtes si environ 15 d'entre elles sont inactives et attendent les créneaux disponibles.
Je suis juste tombé sur Hive CONNECTOR dans la documentation Presto, qui a une section Propriétés de configuration du catalogue AWS Glue . Là on peut voir
Hive.metastore.glue.max-connections
: Nombre maximum de connexions simultanées à Glue (par défaut à 5).
Cela me fait me demander si cela a quelque chose à voir avec mon problème. Si je comprends bien, Athena est simplement un Presto qui s'exécute sur un cluster EMR qui est configuré pour utiliser AWS Glue Data Catalog comme Metastore.
Et si mon problème venait du fait que le cluster EMR pour Athena utilise simplement la valeur par défaut pour les connexions simultanées à Glue, qui est 5 et qui est exactement le nombre de requêtes simultanées réellement exécutées (en moyenne) dans mon cas.
L'équipe Athena a récemment déployé un hôte de nouvelles fonctionnalités pour Athena. bien que QUEUED
soit dans l'état enum depuis un certain temps, il n'a pas été utilisé jusqu'à présent. Alors maintenant, je reçois des informations correctes sur l'état de la requête dans un onglet historique, mais tout le reste reste le même.
En outre, n autre article a été publié avec un problème similaire.
Les limites de votre compte pour le service Athena ne sont pas un SLA, c'est plutôt une priorité dans le planificateur de requêtes.
Selon la capacité disponible, vos requêtes peuvent être mises en file d'attente même si vous n'exécutez aucune autre requête. Ce que signifie exactement une limite de concurrence supérieure est interne et pourrait changer, mais d'après mon expérience, il est préférable de la considérer comme la priorité par laquelle le planificateur de requêtes traitera votre requête. Les requêtes pour tous les comptes s'exécutent dans le même pool de serveurs et si tout le monde exécute des requêtes, il ne restera plus de capacité pour vous.
Vous pouvez le voir en action en exécutant la même requête maintes et maintes fois, puis en traçant les métriques d'exécution des requêtes au fil du temps, vous remarquerez qu'elles varient beaucoup et vous remarquerez des pics dans le temps où vos requêtes sont mises en file d'attente en haut de toutes les heures - lorsque tout le monde exécute ses requêtes planifiées.