正在试验databricks spark cluster。在配置单元数据库中创建表时,我第一次遇到以下错误。
19/06/18 21:34:17 ERROR SparkExecuteStatementOperation: Error running hive query:
org.apache.hive.service.cli.HiveSQLException: java.lang.NoClassDefFoundError: org/joda/time/ReadWritableInstant
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.org$apache$spark$sql$hive$thriftserver$SparkExecuteStatementOperation$$execute(SparkExecuteStatementOperation.scala:296)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$1$$anon$2$$anonfun$run$2.apply$mcV$sp(SparkExecuteStatementOperation.scala:182)
at org.apache.spark.sql.hive.thriftserver.server.SparkSQLUtils$class.withLocalProperties(SparkSQLOperationManager.scala:190)
在随后尝试创建同一个表(不重新启动集群)时,我发现。。。
org.apache.hive.service.cli.HiveSQLException: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyPrimitiveObjectInspectorFactory
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.org$apache$spark$sql$hive$thriftserver$SparkExecuteStatementOperation$$execute(SparkExecuteStatementOperation.scala:296)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$1$$anon$2$$anonfun$run$2.apply$mcV$sp(SparkExecuteStatementOperation.scala:182)
at org.apache.spark.sql.hive.thriftserver.server.SparkSQLUtils$class.withLocalProperties(SparkSQLOperationManager.scala:190)
at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.withLocalProperties(SparkExecuteStatementOperation.scala:44)
从beeline(客户机),我得到以下错误。。。。基本上是一样的。
13: jdbc:spark://dbc-e1ececb9-10d2.cloud.data> create table test_dnax_db.sample2 (name2 string);
Error: [Simba][SparkJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: java.lang.NoClassDefFoundError: org/joda/time/ReadWritableInstant, Query: create table test_dnax_db.sample2 (name2 string). (state=HY000,code=500051)
13: jdbc:spark://dbc-e1ececb9-10d2.cloud.data> create table test_dnax_db.sample2 (name2 string);
Error: [Simba][SparkJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyPrimitiveObjectInspectorFactory, Query: create table test_dnax_db.sample2 (name2 string). (state=HY000,code=500051)
我试过用databricks上传依赖的joda时间罐和serde罐 libraries
功能。另外,我还设置了spark属性 spark.driver.extraClassPath
(给定的错误来自Spark驱动器,而不是工人)。都没用。我确实在hosts/databricks/hive和/databricks/jars文件夹中看到了可用的依赖jar。
我也尝试过设置环境变量,比如 HADOOP_CLASSPATH
,运气不好。
众所周知,databricks论坛毫无用处,因为它们根本没有策划(与splunk或类似的商业产品相比)。
欢迎提出任何建议。
我可以使用 location
关键字以及元存储中现有表的查询。
编辑:
我怀疑sparkexecutestatementoperation(spark cluster中的thrift entry类到sql执行,在驱动程序上运行)可能使用了与应用程序不同的类加载器。我在我的应用程序类静态块中添加了这个,我知道它被初始化了,我没有看到classnotfoundexception,即jar对应用程序可用。但是底层驱动程序看不到相关的jar。
static {
try {
Class<?> aClass = Class.forName("org.joda.time.ReadWritableInstant");
}
} catch (ClassNotFoundException e) {
LOG.warn("Unable to find ReadWritableInstant class", e);
}
}
暂无答案!
目前还没有任何答案,快来回答吧!