noclassdeffounderror кластера искровых блоков данных во время вставки - PullRequest
1 голос
/ 19 июня 2019

Эксперименты с 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);
        }
}
...