J'essaie de lancer SparkSQL:
val sqlContext = new org.Apache.spark.sql.Hive.HiveContext(sc)
Mais l’erreur que j’obtiens est la suivante:
... 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)
Je vois qu'il existe un metastore_db folder existe ..
Mon métastore Hive inclut mysql en tant que métastore.Mais nous ne savons pas pourquoi l’erreur apparaît comme une exception
La même erreur se produisait lors de la création de cadres de données sur Spark Shell:
Causée par: ERREUR XSDB6: une autre instance de Derby a peut-être déjà démarré la base de données/metastore_db.
Cause:
J'ai constaté que cela se produisait car plusieurs autres instances de Spark-Shell fonctionnaient déjà et détenaient déjà une base de données derby. Ainsi, lorsque je démarrais un autre Spark Shell et que je créais un cadre de données à l'aide de RDD.toDF (), une erreur se présentait:
Solution:
J'ai exécuté la commande ps pour trouver d'autres instances de Spark-Shell:
ps -ef | grep spark-Shell
et je les ai tous tués en utilisant la commande kill:
kill -9 Spark-Shell-processID (exemple: kill -9 4848)
Après que toutes les instances de SPark-Shell aient disparu, j'ai démarré un nouveau SPark Shell et j'ai rediffusé ma fonction de trame de données. Tout s'est très bien passé :)
Si vous utilisez spark Shell, vous ne devriez pas instancier un HiveContext, il y en a un créé automatiquement appelé sqlContext
(le nom est trompeur - si vous compilez Spark avec Hive, ce sera un HiveContext). Voir discussion similaire ici .
Si vous n'exécutez pas dans Shell - cette exception signifie que vous avez créé plusieurs HiveContext dans la même machine virtuelle, ce qui semble impossible - vous ne pouvez en créer qu'un.
Un autre cas où vous pouvez voir la même erreur est un Spark REPL d'un point de terminaison dev AWS Glue, lorsque vous essayez de convertir un cadre dynamique en un cadre de données.
Il y a en fait plusieurs exceptions différentes comme:
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
La solution est difficile à trouver avec Google mais finalement elle est décrite ici .
Le REPL chargé contient une SparkSession
instanciée dans une variable spark
et il vous suffit de l'arrêter avant de créer une nouvelle 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()
Je faisais face au même problème lors de la création de la table.
sqlContext.sql("CREATE TABLE....
Je pouvais voir beaucoup d'entrées pour ps -ef | grep spark-Shell
, alors je les ai toutes tuées et redémarré spark-Shell
. Cela a fonctionné pour moi.
Si vous rencontrez des problèmes lors de la création de l'application WAS sur une machine Windows:
db.lck
présent dans WebSphere\AppServer\profiles\AppSrv04\databases\EJBTimers\server1\EJBTimerDB
(ma base de données est EJBTimerDB qui était à l'origine du problème)Cela s'est produit lorsque j'utilisais pyspark ml Word2Vec. J'essayais de charger le modèle précédemment construit. L'astuce consiste à créer un cadre de données vide de pyspark ou scala à l'aide de sqlContext. Voici la syntaxe python -
from pyspark.sql.types import StructType
schema = StructType([])`
empty = sqlContext.createDataFrame(sc.emptyRDD(), schema)
Ceci est une solution de contournement. Mon problème est résolu après l'utilisation de ce bloc. Remarque - Cela ne se produit que lorsque vous instanciez sqlContext à partir de HiveContext, et non SQLContext.
L'erreur est due au fait que vous utilisez plusieurs étincelles Shell que vous essayez d'exécuter sur le même noeud ou en raison d'une défaillance du système, il est arrêté sans quitter correctement l'étincelle Shell. nous
[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
J'ai eu cette erreur en exécutant sqlContext._get_Hive_ctx()
Cela a été provoqué par le fait de tenter initialement de charger un RDD en pipeline dans un cadre de données J'ai l'erreurException: ("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))
ceci avant de le reconstruire, mais à titre d’information, j’ai vu d’autres rapporter que cela ne les aidait pas.