【问题标题】:SparkSession doesn't shutdown properly between unit testsSparkSession 在单元测试之间没有正确关闭
【发布时间】:2019-05-11 20:15:06
【问题描述】:

我有一些单元测试需要有自己的 sparkSession。我扩展了 SQLTestUtils,并覆盖了许多其他 Spark 单元测试中使用的 beforeAll 和 afterAll 函数(来自源代码)。我有一些看起来像这样的测试套件:

class MyTestSuite extends QueryTest with SQLTestUtils {

    protected var spark: SparkSession = null

    override def beforeAll(): Unit = {
        super.beforeAll()
        spark = // initialize sparkSession...
    }

    override def afterAll(): Unit = {
        try {
            spark.stop()
            spark = null
        } finally {
            super.afterAll()
        }
    }

    // ... my tests ...

}

如果我运行其中一个,那很好,但如果我运行两个或更多,我会收到以下错误:

原因:ERROR XSDB6:另一个 Derby 实例可能已经启动了数据库 /home/jenkins/workspace/Query/apache-spark/sql/hive-thriftserver-cat-server/metastore_db。

但我认为afterAll() 应该正确关闭火花,以便我可以创建一个新的。这不对吗?我该如何做到这一点?

【问题讨论】:

  • 嗨,您找到解决方案了吗?我有类似的问题

标签: apache-spark testing apache-spark-sql derby


【解决方案1】:

执行此操作的一种方法是禁用 Spark 应用项目的并行测试执行,以确保当时只有一个 Spark Session 对象实例处于活动状态。在 sbt 语法中它会是这样的:

  project.in(file("your_spark_app"))
    .settings(parallelExecution in Test := false)

缺点是这是针对每个项目的设置,它还会影响将从并行化中受益的测试。一种解决方法是为 Spark 测试创建一个单独的项目。

【讨论】:

  • 是的,不,这没有帮助。测试不是并行运行的。
猜你喜欢
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2011-01-26
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 2010-09-08
相关资源
最近更新 更多