为什么单个测试失败并显示“错误XSDB6:另一个Derby实例可能已经启动了数据库”?

问题描述 投票:1回答:2

我使用Spark 1.6。

我们有一个使用SqlContext写入HDFS的HDFS写入方法。现在我们需要切换到使用HiveContext。当我们这样做时,现有的单元测试不运行并给出错误

Error XSDB6: Another instance of Derby may have already booted the database <local path>\metastore_db

无论我是通过IntelliJ测试运行器还是通过命令行上的maven运行单个测试,都会发生这种情况。

据我所知,当多个HiveContexts或多个进程试图访问metastore_db时,会出现问题。但是我在本地计算机上运行单个测试而没有其他任务,因此我无法理解多个进程的来源

apache-spark hdfs apache-spark-sql derby apache-spark-1.6
2个回答
1
投票

当HiveContext被实例化时,它会在测试路径中创建一个名为metastore_db的Metastore目录。因此,在测试后删除此目录将允许您再次创建HiveContext。

Java的:

FileUtils.deleteDirectory(new Path(path of metastore_db));

0
投票

弄清楚我收到错误的原因。在单元测试中,我们将数据写入本地文件系统上的ORC,然后读取以验证写入是否正确完成。

write和read方法在同一个进程中创建了自己的HiveContexts,导致了对Metastore的锁定。我猜测,当它是SqlContext时,它不是一个阻止器,因为不需要本地Metastore。

我们现在已经开始在构建持久性服务时创建HiveContext。在语义上更有意义。选择此选项而不是为每个测试创建和销毁新的SparkContext(以及新的HiveContext),因为这会给我们的测试套件增加相当大的开销而不会带来太多好处(如果您有不同的意见,请纠正我)

© www.soinside.com 2019 - 2024. All rights reserved.