Kyuubi prend en charge plusieurs niveaux de partage qui déterminent l'allocation des moteurs Spark entre les sessions, les utilisateurs et les groupes.
Moteurs pris en charge
L'installation de Kyuubi dans un cluster E-MapReduce inclut également YARN et Spark 3 en tant que dépendances. Kyuubi sur E-MapReduce prend uniquement en charge Spark 3 sur YARN. Flink, Trino et Spark 2 ne sont pas pris en charge. Chaque moteur Spark correspond à une application Spark unique sur YARN. Pour plus d'informations, consultez la section Exemples.
Niveaux de partage
Pour définir le niveau de partage d'un moteur, configurez le paramètre kyuubi.engine.share.level dans l'onglet kyuubi-defaults.conf de la page de configuration du service Kyuubi.
|
Niveau de partage |
Description |
Cas d'utilisation |
Degré d'isolation |
Capacité de partage |
|
CONNECTION |
Un moteur est lancé par session. |
|
Élevé |
Faible |
|
USER |
Un moteur par utilisateur. |
Moyen |
Moyen |
|
|
GROUP |
Un moteur par groupe de ressources. |
Faible |
Élevé |
|
|
SERVER |
Un moteur par cluster. |
Administrateurs |
Le plus élevé pour un cluster à haute sécurité, et le plus faible pour un cluster standard. |
Les clusters à haute sécurité sont réservés aux administrateurs. |
Exemples
Les exemples suivants utilisent le niveau de partage USER (paramètre kyuubi.engine.share.level défini sur USER) et supposent que tous les utilisateurs sont authentifiés via LDAP (Lightweight Directory Access Protocol) ou Kerberos.
-
Lancer un moteur à la demande
Lorsqu'un nouvel utilisateur,
user1, soumet une tâche à l'aide de l'outil kyuubi-beeline, le serveur Kyuubi lance un nouveau moteur Spark pour la traiter.kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \ -f query1.sqlSi un autre utilisateur,
user2, doit spécifier des ressources pour le moteur Spark, il peut utiliser l'une des méthodes suivantes :-
Méthode 1 : Définissez les ressources, telles que les exécuteurs de l'application Spark, dans l'URL JDBC.
# Set User config via JDBC Connection URL kyuubi-beeline -n user2 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000?spark.dynamicAllocation.enabled=false;spark.executor.cores=2;spark.executor.memory=4g;spark.executor.instances=4" \ -f query1.sql -
Méthode 2 : Définissez les ressources du moteur Spark dans le fichier de configuration kyuubi-defaults.conf.
# Set User default config in kyuubi-defatuls.conf # ___user2___.spark.dynamicAllocation.enabled=false # ___user2___.spark.executor.memory=5g # ___user2___.spark.executor.cores=2 # ___user2___.spark.executor.instances=10 kyuubi-beeline -n user2 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \ -f query1.sql
-
-
Soumettre des tâches à un moteur spécifique
Une fois une tâche terminée, le moteur Spark lancé par Kyuubi reste actif pendant une période configurable. De nouvelles tâches peuvent réutiliser ce moteur inactif, ce qui améliore les performances en évitant le lancement d'une nouvelle application YARN. Si aucune nouvelle tâche n'est soumise durant cette période, le moteur s'arrête automatiquement. Le paramètre kyuubi.session.engine.idle.timeout spécifie le délai d'inactivité, qui est par défaut de
PT30M(30 minutes). Configurez ce paramètre dans l'onglet kyuubi-defaults.conf.Kyuubi permet de créer des sous-domaines au sein du même niveau de partage. Par exemple, si un utilisateur,
user4, a besoin de ressources de moteur différentes pour divers scénarios métier, il peut définir le paramètre kyuubi.engine.share.level.subdomain dans l'URL JDBC afin de soumettre des tâches à différents moteurs.kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz1?kyuubi.engine.share.level.subdomain=biz1" \ -f query1.sql kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz2?kyuubi.engine.share.level.subdomain=biz2" \ -f query2.sql kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz3?kyuubi.engine.share.level.subdomain=biz3" \ -f query3.sql -
Un seul moteur prend en charge plusieurs sessions Spark
Plusieurs sessions Spark peuvent utiliser simultanément un seul moteur Spark. Par exemple, si un utilisateur,
user1, soumet deux tâches depuis deux terminaux différents en même temps, les deux tâches s'exécutent sur le même moteur Spark. Spark alloue les ressources des exécuteurs aux tâches selon son mécanisme de planification interne par défaut.# Console 1 kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/biz1" \ -f query1.sql # Console 2 kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/biz2" \ -f query2.sql