No se pudo inicializar derby.jdbc.AutoloadedDriver40

operando

spark2.4.5 hive 2.3.5
NoClassDefFoundError se informa cuando el cliente ejecuta tareas de Spark y consulta la tabla de hive

Registro de excepciones

javax.jdo.JDOFatalInternalException: Se ha detectado una excepción inesperada.
en javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation (JDOHelper.java:1193)
...
en org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke (RetryingHMSHandler.java:107)
en org.apache.hametastore. RetryingHMSHandler. <init> (RetryingHMSHandler.java:79)
en org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy (RetryingHMSHandler.java:92)
en org.apache.hadoop.hive.metastore.HandRetryingStore.Hive.new java: 6891)
en org.apache.hadoop.hive.metastore.HiveMetaStoreClient. <init> (HiveMetaStoreClient.java:164)
...
en org.apache.hadoop.hive.ql.metadata.Hive.create (Hive.java : 332)
en org.apache.hadoop.hive.ql.metadata.Hive.getInternal (Hive.java:312)
en org.apache.hadoop.hive.ql.metadata.Hive.get (Hive.java:288)
...
en org.apache.spark.sql.Dataset $ .ofRows (Dataset.scala: 79)
en org.apache.spark.sql.SparkSession.sql (SparkSession.scala: 642)
en com.xxx.xxx.xxx.xxx (xxx .java: 43)
en com.xxx.xxx.xxx.main (xxx.java:29)
en sun.reflect.NativeMethodAccessorImpl.invoke0 (método nativo)
en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
NestedThrowablesStackTrace:
java.lang.reflect.InvocationTargetException
...
en org.apache.hadoop.hive.metastore.HiveMetaStore $ HMSHandler.createDefaultDB (HiveMetaStore.java:659)
en org.apache.hadoop.hive.metastore.HiveMetaStore $ HMSHandler.init (HiveMetaStore.java:431)
en sun.reflect .NativeMethodAccessorImpl.invoke0 (Método nativo)
en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
en java.lang.reflect.Method.invoke (Método .java: 498)
en org.apache.hadoop.hive.metastore.RetryingHMSHandler.invokeInternal (RetryingHMSHandler.java:148)
en org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke (RetryingHMSHandler.java:107)
en org.apache.hadoop.hive.metastore.RetryingHMSHandler. <init> (RetryingHMSHandler.java:79)
en org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy (RetryingHMSHandler.java:92)
en org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy (RetryingHMSHandler.java:92) .hive.metastore.HiveMetaStore.newRetryingHMSHandler (HiveMetaStore.java:6891)
...
en org.apache.hadoop.hive.ql.metadata.Hive.reloadFunctions (Hive.java:248)
en org.apache.hadoop.hive. ql.metadata.Hive.registerAllFunctionsOnce (Hive.java:231)
en org.apache.hadoop.hive.ql.metadata.Hive. <init> (Hive.java:388)
en org.apache.hadoop.hive.ql. metadata.Hive.create (Hive.java:332)
en org.apache.hadoop.hive.ql.metadata.Hive.getInternal (Hive.java:312)
en org.apache.hadoop.hive.ql.metadata.Hive. obtener (Hive.java:288)
...
en org.apache.spark.sql.execution.SQLExecution $ .withSQLConfPropagation (SQLExecution.scala: 127)
en org.apache.spark.sql.execution.SQLExecution $ .withNewExecutionId (SQLExecution.scala: 75)
en org.apache.spark .sql.Dataset.withAction (Dataset.scala: 3369)
en org.apache.spark.sql.Dataset. <init> (Dataset.scala: 194)
en org.apache.spark.sql.Dataset $ .ofRows (Dataset. scala: 79)
en org.apache.spark.sql.SparkSession.sql (SparkSession.scala: 642)
en xxx.xxx.xxx.xxx.xxx (xxx.java:43)
en xxx.xx.xxx.xxx.main (xxx.java:29)
en sun.reflect.NativeMethodAccessorImpl.invoke0 (método nativo)
en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
en java.lang.reflect.Method.invoke (Method.java:498)
Causado por: java.lang.NoClassDefFoundError: No se pudo inicializar la clase org.apache.derby .jdbc.AutoloadedDriver40
en java.lang.Class.forName0 (método nativo)
en java.lang.Class.forName (Class.java:348)
en java.sql.DriverManager.isDriverAllowed (DriverManager.java:556)
en java.sql .DriverManager.getConnection (DriverManager.java:661)
en java.sql.DriverManager.getConnection (DriverManager.java:208)
... 101 más

Análisis de anomalías

1. Ver la pila de excepciones

NoClassDefFoundError: No se pudo inicializar la clase org.apache.derby.jdbc.AutoloadedDriver40
es la excepción de la clase de inicialización (tenga en cuenta que no es ClassNotFoundException), el paquete correspondiente de este tipo es derby * .jar

2. Busque paquetes relacionados

   find / -name derby*.jar  发现jdk 下面有此包,hive 下也有,并不缺少包。ClassNotFoundException是缺少包,NoClassDefFoundError 应该为版本不一致导致。

3. Compruebe si la colmena es normal

   执行hive命令,发现hive正常

4. Verifique la información de la pila nuevamente para ver qué código comercial genera la excepción

  发现 com.xxx.xxx.xxx.xxx(xxx.java:43)  执行了   sparkSession.sql("use "+ dbname);

5. Ejecute manualmente comandos Spark-Shell para simular acciones de código.

  import spark.sql
 sql("use dbname")
     抛出类似异常,可以断定spark 任务依赖的jar存在问题

6. Verifique el frasco debajo de SPARK_HOME

Se encuentra que la versión de colmena dependiente es 1.2.2, pero la colmena del entorno operativo real es 2.3.5

Proceso de resolución

1. Reemplace el paquete jar de hive en SPARK_HOME
2. Utilice spark sql para verificar que la excepción anterior desapareció. La nueva excepción es: java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT
3. Verifique los datos y descubra que la versión de hive de la que depende spark2.4.5 es la versión 1.2.x. Hive se actualiza a una versión posterior a la 2. Hive eliminó el parámetro HIVE_STATS_JDBC_TIMEOUT. El código spark-sql todavía llama a este parámetro de hive, por lo que se informa de un error.
4. ¿Cómo resolver el problema de consistencia de la versión Spark y Hive?
(1) Modifique el código fuente de Spark, elimine HIVE_STATS_JDBC_TIMEOUT y vuelva a compilar el paquete jar de spark-hive
(2) Spark todavía usa la versión anterior del cliente de hive, conéctese a la nueva versión de hive
5. Spark aún usa la versión anterior de la solución de cliente de hive : Instale el cliente de hive 1.2.x en el servidor donde se encuentra Spark y sincronice hive-site.xml con los archivos de configuración de Spark y Hadoop.

完毕,验证通过

Supongo que te gusta

Origin blog.51cto.com/zhsusn/2590503
Recomendado
Clasificación