Interruptions de query avec Databricks Connect
Cet article couvre Databricks Connect pour Databricks Runtime 14.0 et versions ultérieures.
Cet article décrit comment gérer les query asynchrones et les interruptions avec Databricks Connect. Databricks Connect vous permet de connecter des IDEs, des serveurs Notebook et des applications personnalisées aux clusters Databricks. See Databricks Connect.
Interruptions d'exécution de query
Pour Databricks Connect pour Databricks Runtime 14.0 et versions ultérieures, l'exécution des requêtes est plus résiliente aux interruptions réseau et autres lors de l'exécution de requêtes de longue durée. Lorsque le programme client reçoit une interruption ou que le processus est mis en pause (jusqu'à 5 minutes) par le système d'exploitation, par exemple lorsque le capot de l'ordinateur portable est fermé, le client se reconnecte à la requête en cours. Cela permet également aux queries de s'exécuter plus longtemps (auparavant seulement 1 heure).
Databricks Connect offre désormais également la possibilité d'interrompre les requêtes en cours, si vous le souhaitez, par exemple pour réduire les coûts.
- Python
- Scala
Le programme Python suivant interrompt une longue query en utilisant l’API interruptTag().
from databricks.connect import DatabricksSession
from time import sleep
import threading
session = DatabricksSession.builder.getOrCreate()
def thread_fn():
sleep(5)
session.interruptTag("interrupt-me")
# All subsequent DataFrame queries that use session will have this tag.
session.addTag("interrupt-me")
t = threading.Thread(target=thread_fn).start()
df = <a long running DataFrame query>
df.show()
t.join()
import com.databricks.connect.DatabricksSession
object InterruptTagExample {
def main(args: Array[String]): Unit = {
val session = DatabricksSession.builder.getOrCreate()
val t = new Thread {
override def run {
Thread.sleep(5000)
session.interruptTag("interrupt-me")
}
}
// All subsequent DataFrame queries that use session will have this tag.
session.addTag("interrupt-me")
t.start()
val df = <a long running DataFrame query>
df.show()
t.join()
}
}
Sessions de longue durée
Les sessions longue durée sont prises en charge dans Databricks Connect version 16.4 et supérieure sur compute serverless.
Lorsque vous utilisez Databricks Connect avec le Serverless compute, après le délai d'inactivité par default, un effort est fait pour préserver votre session. Lorsque vous vous reconnectez, Databricks tente de restaurer automatiquement votre session, y compris les configurations, les vues temporaires, les UDF, les variables temporaires et les fichiers upload.
Ceci est utile pour les sessions avec des commandes qui ont besoin d'un état pour survivre aux périodes d'inactivité, telles que la configuration, l'enregistrement des UDF, la création de vues temporaires ou l'upload de fichiers. Sans cela, un délai d'inactivité vous obligerait à réexécuter toutes ces commandes de configuration avant de reprendre le travail.
Limitations
- Les sessions de longue durée ne sont prises en charge que sur le compute Serverless. Ils ne sont pas pris en charge sur le compute standard ou dédié.
- La récupération de session après un délai d'inactivité est au mieux de nos capacités et n'est pas garantie. Si votre session ne peut pas être restaurée, une nouvelle session est démarrée.
- Les sessions qui accumulent une grande quantité d'état peuvent dépasser la limite de taille, après quoi l'état n'est plus conservé. Se reconnecter après ce threshold start une nouvelle session.
- L'état conservé expire après deux jours d'inactivité. Si votre session est inactive plus longtemps, la reconnexion start une nouvelle session.
- L'état des requêtes en streaming et les scripts SQL qui utilisent
EXECUTE IMMEDIATEne sont pas conservés lors des reconnexions.