hadoop apache-spark derby

hadoop - Causado por: ERROR XSDB6: es posible que otra instancia de Derby ya haya iniciado la base de datos



apache-spark (9)

El error se produjo debido a la shell de múltiples chispas que está intentando ejecutar en el mismo nodo o debido a un fallo del sistema, se apaga sin salir correctamente de la shell de chispas. Por alguna razón, simplemente encuentra la ID del proceso y los mata, para eso nosotros

[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

Estoy tratando de ejecutar SparkSQL:

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

Pero el error que estoy obteniendo es abajo:

... 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)

Veo que existe una carpeta metastore_db ..
Mi colmena, metastore, incluye mysql como metastore.


Estaba enfrentando el mismo problema al crear la tabla.

sqlContext.sql("CREATE TABLE....

Pude ver muchas entradas para ps -ef | grep spark-shell ps -ef | grep spark-shell así que los maté a todos y reinicié spark-shell . Funciono para mi


Esto sucedió cuando estaba usando pyspark ml Word2Vec. Estaba tratando de cargar el modelo previamente construido. El truco es, simplemente crea un marco de datos vacío de pyspark o scala usando sqlContext. A continuación se muestra la sintaxis de Python:

from pyspark.sql.types import StructType schema = StructType([])` empty = sqlContext.createDataFrame(sc.emptyRDD(), schema)

Esta es una solución. Mi problema se solucionó después de usar este bloque. Nota: solo se produce cuando se crea una instancia de sqlContext desde HiveContext, no SQLContext.


Otro caso en el que puede ver el mismo error es un Spark REPL de un punto final de desarrollo de AWS Glue, cuando intenta convertir un marco dinámico en un marco de datos.

En realidad, hay varias excepciones diferentes como:

  • 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 solución es difícil de encontrar en google, pero finalmente se describe here .

El REPL cargado contiene una SparkSession instanciada en una spark variable y solo necesita detenerla antes de crear un nuevo 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()


Recibí el mismo error al crear marcos de datos en Spark Shell:

Causado por: ERROR XSDB6: Es posible que otra instancia de Derby ya haya iniciado la base de datos / metastore_db.

Porque:

Descubrí que esto está sucediendo, ya que había muchas otras instancias de Spark-Shell que ya estaban ejecutando y sosteniendo ya el DB derby, por lo que cuando estaba iniciando otro Spark Shell y creando un Marco de datos en él utilizando RDD.toDF (), se estaba produciendo un error:

Solución:

Ejecuté el comando ps para encontrar otras instancias de Spark-Shell:

ps -ef | concha de grep

y los maté a todos usando el comando kill:

kill -9 Spark-Shell-processID (ejemplo: kill -9 4848)

después de que todas las instancias de SPark-Shell desaparecieron, comencé un nuevo SPark SHell y volví a ejecutar mi función de marco de datos y funcionó bien :)


Si está ejecutando el shell de chispa , no debe crear una instancia de HiveContext, hay uno creado automáticamente llamado sqlContext (el nombre es engañoso, si compiló Spark con Hive, será un HiveContext). Ver discusión similar here .

Si no está ejecutando en shell, esta excepción significa que ha creado más de un HiveContext en la misma JVM, lo que parece imposible, solo puede crear uno.


Si tiene problemas al abrir la aplicación WAS en una máquina con Windows:

  1. matar procesos java utilizando el administrador de tareas
  2. elimine el archivo db.lck presente en WebSphere/AppServer/profiles/AppSrv04/databases/EJBTimers/server1/EJBTimerDB (Mi base de datos es EJBTimerDB que causó el problema)
  3. reiniciar aplicación.

es muy difícil encontrar a dónde deriva tu metastore_db derby por otro hilo, si eres capaz de encontrar el proceso, puedes matarlo usando el comando kill.

Las mejores soluciones para reiniciar el sistema.


sqlContext._get_hive_ctx() este error al ejecutar sqlContext._get_hive_ctx() Esto fue causado inicialmente al intentar cargar un RDD segmentado en un marco de datos. Obtuve el error 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)) Por lo tanto, puede ejecutar esto antes de reconstruirlo, pero FYI tengo visto a otros reportando esto no les ayudó.