在 Apache Spark SQL 中,如何从 HiveContext 关闭 Metastore 连接

In Apache Spark SQL, How to close metastore connection from HiveContext

我的项目有针对不同 HiveContext 配置的单元测试(有时它们在一个文件中,因为它们按功能分组。)

升级到 Spark 1.4 后,我遇到了很多 'java.sql.SQLException: Another instance of Derby may have already booted the database' 问题,因为补丁使这些上下文无法共享同一个元存储。因为为每个测试恢复单例状态是不干净的。我唯一的选择归结为 "recycle" 每个上下文通过终止先前的 Derby Metastore 连接。有办法吗?

好吧,在 Scala 中,我只是将 FunSuite 与 BeforeAndAfterAll 特性一起用于单元测试。然后你可以在 beforeAll 中初始化你的 sparkContext,从中生成你的 HiveContext 并像这样完成它:

  override def afterAll(): Unit = {
    if(sparkContext != null)
      sparkContext .stop()
  }

据我所知,它还会关闭附加到它的 HiveContext。