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メタストアにはメタストアとしてmysqlが含まれていますが、エラーがderby execptionとして表示される理由がわかりません
Spark Shellでデータフレームを作成中に同じエラーが発生していました。
原因:エラーXSDB6:Derbyの別のインスタンスが既にデータベース/ metastore_dbを起動している可能性があります。
原因:
Spark-Shellの他の複数のインスタンスが既に実行されており、ダービーDBを保持しているため、これが起こっていることがわかったので、私は別のSpark Shell .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
(名前は誤解を招く-Sparkをコンパイルした場合、HiveContextになります)。同様の議論 here を参照してください。
シェルで実行していない場合-この例外は、同じJVMで複数のHiveContextを作成したことを意味し、これは不可能と思われます-作成できるのは1つだけです。
同じエラーが表示されるもう1つのケースは、ダイナミックフレームをデータフレームに変換しようとしているときのAWS Glue開発エンドポイントのSpark=REPL 。
実際には、次のようないくつかの異なる例外があります。
pyspark.sql.utils.IllegalArgumentException: u"Error while instantiating 'org.Apache.spark.sql.Hive.HiveSessionState':"
ERROR XSDB6: Another instance of Derby may have already booted the database /home/glue/metastore_db.
Java.sql.SQLException: Failed to start database 'metastore_db' with class loader org.Apache.spark.sql.Hive.client.IsolatedClientLoader
Googleで解決策を見つけるのは難しいですが、最終的には here と説明されています。
ロードされたREPL=には、インスタンス化されたSparkSession
が変数spark
に含まれており、新しいSparkContext
を作成する前に停止する必要があります。
>>> spark.stop()
>>> from pyspark.context import SparkContext
>>> from awsglue.context import GlueContext
>>>
>>> glue_context = GlueContext(SparkContext.getOrCreate())
>>> glue_frame = glue_context.create_dynamic_frame.from_catalog(database=DB_NAME, table_name=T_NAME)
>>> df = glue_frame.toDF()
WindowsマシンでWASアプリケーションを起動中に問題に直面している場合:
db.lck
ファイルはWebSphere\AppServer\profiles\AppSrv04\databases\EJBTimers\server1\EJBTimerDB
(私のDBは問題を引き起こしていたEJBTimerDBです)テーブルの作成中に同じ問題に直面していました。
sqlContext.sql("CREATE TABLE....
ps -ef | grep spark-Shell
の多くのエントリが表示されたため、それらをすべて削除してspark-Shell
を再起動しました。それは私のために働いた。
これは、pyspark ml Word2Vecを使用していたときに起こりました。以前に作成したモデルをロードしようとしていました。トリックは、pysparkの空のデータフレームを作成するか、sqlContextを使用してscalaを作成するだけです。以下はpython構文-
from pyspark.sql.types import StructType
schema = StructType([])`
empty = sqlContext.createDataFrame(sc.emptyRDD(), schema)
これは回避策です。このブロックを使用した後、私の問題は修正されました。注-SQLContextではなく、HiveContextからsqlContextをインスタンス化する場合にのみ発生します。
lck(lock)ファイルは、データベースをロックして、1人のユーザーのみがデータベースにアクセスまたは更新できるようにするアクセス制御ファイルです。このエラーは、同じデータベースを使用している別のインスタンスがあることを示しています。したがって、.lckファイルを削除する必要があります。ホームディレクトリで、metastore_dbに移動し、.lckファイルを削除します。
このエラーは、同じノードで実行しようとしている複数のsparkシェル、またはsparkシェルを適切に終了せずにシャットダウンしたシステム障害が原因で発生しました。プロセスIDとそれらを殺す、そのために私たち
[hadoop@localhost ~]$ ps -ef | grep spark-Shell
hadoop 11121 9197 0 17:54 pts/0 00:00:00 grep --color=auto spark-Shell
[hadoop@localhost ~]$ kill 9197
sqlContext._get_Hive_ctx()
を実行するとこのエラーが発生しました。これは、最初にパイプラインRDDをデータフレームにロードしようとしたために発生しました。エラーException: ("You must build Spark with Hive. Export 'SPARK_Hive=true' and run build/sbt Assembly", Py4JJavaError(u'An error occurred while calling None.org.Apache.spark.sql.Hive.HiveContext.\n', JavaObject id=o29))
他の人がこれが彼らを助けなかったと報告しているのを見ました。