我在SO上经历了多个线程,其中讨论了如何将hive元存储迁移到mysql,以防多个用户想要访问它。
我正在尝试运行一个hive程序来对一个数据集执行SQL,然后清理它(关闭上下文)以对另一个数据集运行另一个SQL。但是我看到错误说:
错误xsdb 6:Derby的另一个实例可能已经引导了数据库
我的问题是,有没有一种方法可以清理运行hive元存储的derby实例,使我的下一个上下文初始化不会看到上一个实例?我觉得这种情况类似于运行多个单元测试,应该有一种方法来清理问题。
在Spark Shell上创建数据框时,我遇到了同样的错误:
由以下原因引起:错误 XSDB6:Derby 的另一个实例可能已引导数据库 /metastore_db。
原因:
我发现这种情况正在发生,因为已经有多个其他Spark-Shell实例在运行并持有derby DB,所以当我启动另一个Spark Shell并使用RDD. toDF()在其上创建Data Frame时,它抛出了错误:
解决方案:
我运行ps命令查找Spark Shell的其他实例:
ps -ef | grep spark-shell
我使用kill命令杀死了他们:
kill -9 Spark-Shell-processID ( example: kill -9 4848)
在所有的SPark-Shell实例都消失后,我启动了一个新的SPark SHell并重新运行了我的数据框函数,它运行得很好:)