注释
本文探讨适用于 Databricks Runtime 14.0 及以上版本的 Databricks Connect。
本文介绍如何使用 Databricks Connect 处理异步查询和中断。 Databricks Connect 使你能够将常用 IDE、笔记本服务器和自定义应用程序连接到 Azure Databricks 群集。 请参阅 Databricks Connect。
查询执行中断
对于 Databricks Runtime 14.0 及更高版本使用的 Databricks Connect,在执行长时间运行的查询时,查询执行对网络和其他中断的适应性更强。 当客户端程序收到中断信号或被操作系统暂停(最多 5 分钟)时(例如合上笔记本电脑盖),客户端将重新连接到正在运行的查询。 这也允许查询运行更长的时间(以前只有 1 小时)。
Databricks Connect 现在还能够根据需要中断正在运行的查询,例如节省成本。
Python
以下 Python 程序使用 interruptTag() API 中断长时间运行的查询。
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()
Scala
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()
}
}
长期会话
注释
Databricks Connect 版本 16.4 及更高版本在无服务器计算中支持长期会话。
将 Databricks Connect 与无服务器计算配合使用时,在默认空闲超时后,尽最大努力保留会话。 重新连接时,Databricks 会尝试自动还原会话,包括配置、临时视图、UDF、临时变量和上传的文件。
这对于需要在非活动期间保持状态的命令(例如配置设置、注册用户定义函数 (UDF)、创建临时视图或上传文件)的会话非常有用。 如果没有这样的话,空闲超时会要求你在恢复工作之前重新运行所有这些设置命令。
局限性
- 长期会话仅在无服务器计算上受支持。 标准或专用计算不支持它们。
- 空闲超时后的会话恢复是尽最大努力的,不能保证。 如果无法还原会话,则会启动一个新会话。
- 累积大量状态的会话可能会超过大小限制,之后不再保留状态。 超过此阈值后重新连接将启动新的会话。
- 保留状态在处于非活动状态的两天后过期。 如果会话空闲时间超过此时间,则重新连接会启动一个新会话。
- 在重新连接时,使用
EXECUTE IMMEDIATE的流式查询状态和SQL脚本不会被保留。