You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks集群从10.4 LTS升级到12.2 LTS后自定义保活机制兼容性问题咨询

Databricks集群从10.4 LTS升级到12.2 LTS后自定义保活机制兼容性问题咨询

最近把Databricks集群从10.4 LTS升级到12.2 LTS后,之前用的自定义集群保活机制突然失效了,折腾了好一阵没搞定,来这里请教下各位大佬!

先给大家说下我们的场景:我们在Azure机器学习VM上部署Python代码,这些代码会远程连接到Databricks集群。为了让多个算法共享资源、降低成本,我们用了一个共享集群,还设置了10分钟无活动自动终止的配置。但有些算法需要Spark会话保持超过10分钟,大部分时候我们会把DataFrame写入临时表或文件之后再重新加载,但偶尔直接保持会话、让DataFrame驻留内存会更高效。

之前为了应对这个需求,我们写了一个后台线程,每隔9分钟就给集群发一次ping请求来维持活动状态,代码大概是这样的:

import threading
import time
import logging

if keep_alive:
    # 启动后台线程保持Spark会话活跃
    self._keep_spark_alive_thread = threading.Thread(
        target=self._keep_spark_alive,
        args=(self.spark,),
        daemon=True
    )
    self._keep_spark_alive_thread.start()

def _keep_spark_alive(self, spark):
    while True:
        try:
            # 执行简单SQL触发集群活动
            spark.sql("SELECT 1").collect()
            time.sleep(540)  # 间隔9分钟
        except Exception as e:
            logging.warning(f"Spark保活操作失败: {str(e)}")
            break

结果升级到12.2 LTS之后,这个保活机制完全不管用了,集群还是会在10分钟无活动后自动终止。有没有大佬遇到过类似的问题?或者知道12.2 LTS里关于集群活动检测的逻辑有什么变化吗?


我自己琢磨的几个可能原因

  • 活动判定标准变了:Databricks 12.2 LTS可能调整了集群“活动”的定义,单纯执行SELECT 1这种轻量SQL可能不再被算作有效活动,或者这类操作的活动标记时效变短了,撑不到下一次ping。
  • 远程会话的跟踪逻辑改了:升级后,从AML VM发起的远程会话可能和集群的活动跟踪逻辑解耦了,线程里的ping操作可能没关联到主会话,所以集群还是认为主会话处于无活动状态。
  • 线程生命周期管理变化:虽然设置了daemon=True,但12.2 LTS对线程的管理可能有调整,导致保活线程提前退出,没法持续执行ping操作。

目前想到的几个解决方案

  • 换一种保活操作:试试执行更有“存在感”的Spark操作,比如读取一小段集群上的表数据,或者创建临时视图再删除,确保操作能被集群的活动检测系统识别。比如:
    def _keep_spark_alive(self, spark):
        while True:
            try:
                # 用更明确的操作触发活动
                temp_df = spark.range(1)
                temp_df.createOrReplaceTempView("keep_alive_temp_view")
                spark.sql("SELECT * FROM keep_alive_temp_view").collect()
                spark.catalog.dropTempView("keep_alive_temp_view")
                time.sleep(540)
            except Exception as e:
                logging.warning(f"Spark保活操作失败: {str(e)}")
                break
    
  • 查官方版本变更说明:打算去翻12.2 LTS的release notes,看看集群自动终止、会话活动检测这块有没有什么更新,说不定官方已经提供了更可靠的保活方式。
  • 临时调整自动终止时长:目前先把集群自动终止时间调长到算法需要的时长,同时监控集群的实际使用情况,后续再结合官方方案优化。
  • 排查集群终止日志:去Databricks集群的事件日志里看看,集群终止时的具体原因是什么,是明确的“无活动”还是其他问题,这应该能帮我定位根源。

有没有朋友在升级到12.2 LTS后遇到过类似的保活问题?或者有其他更靠谱的解决思路,欢迎分享!

备注:内容来源于stack exchange,提问作者BeGreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:34:41