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

停止Spark会话后新建本地会话报错:Derby未停止该如何解决?

解决Spark停止会话后重新创建无法复用本地Derby Metastore的问题

问题根源

嵌入式Derby数据库(Spark默认Hive Metastore存储)同一时间仅允许一个JVM类加载器实例访问。调用spark_session.stop()后,Spark并未主动触发Derby的完整关闭流程,导致数据库锁残留,新会话的类加载器无法获取访问权限,从而抛出"Another instance of Derby may have already booted the database"错误。

解决方案

1. 显式关闭Derby数据库(推荐)

在停止Spark会话前,执行Derby原生的SHUTDOWN命令,强制数据库释放锁资源:

from pyspark.sql import SparkSession
import gc

if __name__ == "__main__":
    # 创建第一个会话
    spark_builder = SparkSession.builder.enableHiveSupport().master("local").appName("mega_app")
    spark_session = spark_builder.getOrCreate()
    spark_session.sql("SHOW DATABASES").show()

    # 显式关闭Derby数据库
    spark_session.sql("SHUTDOWN")
    # 停止Spark会话
    spark_session.stop()
    # 触发垃圾回收,清理残留JVM资源
    gc.collect()

    # 创建新会话并复用原Metastore
    spark_builder = SparkSession.builder.enableHiveSupport().master("local").appName("mega_app")
    spark_session = spark_builder.getOrCreate()
    spark_session.sql("SHOW DATABASES").show()

2. 单元测试场景:指定独立Metastore目录(可选)

如果测试不需要严格复用同一Metastore,可以为每个会话指定独立的存储目录,避免锁冲突:

# 第一个会话
spark_builder = SparkSession.builder.enableHiveSupport()\
    .master("local")\
    .appName("mega_app")\
    .config("spark.sql.warehouse.dir", "./test_warehouse_1")\
    .config("spark.hadoop.javax.jdo.option.ConnectionURL", 
            "jdbc:derby:;databaseName=metastore_db_1;create=true")
spark_session = spark_builder.getOrCreate()

# 停止后创建第二个会话
spark_session.stop()
spark_builder = SparkSession.builder.enableHiveSupport()\
    .master("local")\
    .appName("mega_app")\
    .config("spark.sql.warehouse.dir", "./test_warehouse_2")\
    .config("spark.hadoop.javax.jdo.option.ConnectionURL", 
            "jdbc:derby:;databaseName=metastore_db_2;create=true")
spark_session = spark_builder.getOrCreate()

3. 手动清理Derby锁文件(应急方案)

若上述方法失效,可手动删除metastore_db目录下的锁文件(如db.lck、dbex.lck),但该方法不稳定,仅适合临时测试场景,需确保无残留JVM进程持有锁。

验证说明

该方案在pyspark 2.4.8和3.3.4版本中均测试通过,可正常复用原Metastore数据。

内容的提问来源于stack exchange,提问作者Felix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:04:56