Эксперименты с Databricks Spark cluster.При создании таблицы в базе данных Hive в первый раз я получаю следующую ошибку:
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)
Из Билайн (клиент) я получаю следующие ошибки ... по сути, одно и то же.
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)
Я пытался загружать зависимые joda-time jar и serde jars, используяlibraries
особенность блоков данных.Также я установил свойство spark spark.driver.extraClassPath
(данная ошибка исходит от драйвера Spark, а не от рабочих).Ни то, ни другое не помогает.Я вижу зависимые jar-файлы, доступные в папках hosts / databricks / hive и / databricks / jars.
Я также попытался установить переменные окружения, такие как HADOOP_CLASSPATH
, но без особой удачи.
Форумы по базам данных, как известно, бесполезны, поскольку их вообще не курируют (по сравнению с разрозненными или аналогичными коммерческими продуктами).).
Любые предложения приветствуются.
Я могу успешно создать базу данных с помощью ключевого слова location
, а также выполнить запрос из существующей таблицы в метастазе.
РЕДАКТИРОВАТЬ:
Я подозреваю, что SparkExecuteStatementOperation (экономный входной класс для выполнения sql в spark кластере, работающий на драйвере) может использовать другой загрузчик классов, отличный от приложения.Я добавил это в мой статический блок класса приложения, который, как я знаю, инициализируется, и я не вижу исключения ClassNotFoundException, т. Е. Jar доступен для приложения.Но основной драйвер не видит соответствующую банку.
static {
try {
Class<?> aClass = Class.forName("org.joda.time.ReadWritableInstant");
}
} catch (ClassNotFoundException e) {
LOG.warn("Unable to find ReadWritableInstant class", e);
}
}