我正在尝试运行SparkSQL:
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
但是我得到的错误如下:
... 125 more Caused by: java.sql.SQLException: Another instance of Derby may have already booted the database /root/spark/bin/metastore_db. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) ... 122 more Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /root/spark/bin/metastore_db. at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source) at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(Unknown Source) at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(Unknown Source)
我看到有一个metastore_db文件夹存在..
我的hive Metastore包含mysql as metastore.但不确定为什么错误显示为derby execption
我在Spark Shell上创建数据框时遇到了同样的错误:
引发者:错误XSDB6:Derby的另一个实例可能已经启动了数据库/ metastore_db.
原因:
我发现这种情况正在发生,因为已经有多个其他Spark-Shell实例已经运行并且已经拥有了derby DB,所以当我启动另一个Spark Shell并使用RDD.toDF()创建数据框时,它抛出错误:
解:
我运行ps命令来查找Spark-Shell的其他实例:
ps -ef | grep spark-shell
我使用kill命令杀死它们:
kill -9 Spark-Shell-processID(例如:kill -9 4848)
在所有SPark-Shell实例都消失之后,我开始了一个新的SPark SHell并重新启动了我的数据框功能,它运行得很好:)
如果你在spark shell中运行,你不应该实例化一个HiveContext,有一个自动调用的创建sqlContext
(名称有误导性 - 如果你用Hive编译Spark,它将是一个HiveContext).看到类似的讨论在这里.
如果你没有在shell中运行 - 这个异常意味着你在同一个JVM中创建了多个HiveContext,这似乎是不可能的 - 你只能创建一个.