Как подключиться к улью с помощью JDBC и HikariCP в весеннем пакетном проекте?

Я пытаюсь подключиться к hive jdbc с помощью hikaricp (kerberos и keytab) в моем весеннем пакетном проекте.

Ниже приводится моя конфигурация jdbcDataSource.

@Bean(name = "hiveJdbcBatchDataSource")
@Qualifier(value = "hiveJdbcBatchDataSource")
    public DataSource hiveJdbcBatchDataSource() throws Exception {

        try {
            HikariConfig config = new HikariConfig();
            config.setDriverClassName(driverClassName);
            config.setJdbcUrl(hiveUrl);

            System.setProperty("java.security.krb5.conf", krb5ConfPath);
            if (StringUtils.isNotBlank(keytabPath)) {
                org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
                conf.set("hadoop.security.authentication", "kerberos");
                UserGroupInformation.setConfiguration(conf);
                UserGroupInformation.loginUserFromKeytab(principal, keytabPath);
            } else {
                System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
                config.setUsername(userName);
                config.setPassword(password);
            }

            config.setConnectionTestQuery("show databases");
            config.addDataSourceProperty("zeroDateTimeBehavior", zeroDateTimeBehavior);
            config.addDataSourceProperty("cachePrepStmts", cachePrepStmts);
            config.addDataSourceProperty("prepStmtCacheSize", prepStmtCacheSize);
            config.addDataSourceProperty("prepStmtCacheSqlLimit", prepStmtCacheSqlLimit);
            // connection pooling
            config.setPoolName(poolName);
            config.setMaximumPoolSize(maximumPoolSize);
            config.setIdleTimeout(idleTimeoutMs);
            config.setMaxLifetime(maxLifetimeMs);

            return new HikariDataSource(config);

        } catch (IOException e) {
            throw new BeanInitializationException("IOException Failed to init data souce.", e);
        } catch (Exception e) {
            throw new Exception("Exception Failed to init data souce.", e);
        }
    }

Я получаю следующее исключение

Caused by: org.springframework.batch.core.configuration.BatchConfigurationException: java.lang.IllegalArgumentException: DatabaseType not found for product name: [Apache Hive]
    at org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer.initialize(DefaultBatchConfigurer.java:119)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
    ... 16 common frames omitted
Caused by: java.lang.IllegalArgumentException: DatabaseType not found for product name: [Apache Hive]
    at org.springframework.batch.support.DatabaseType.fromProductName(DatabaseType.java:84)
    at org.springframework.batch.support.DatabaseType.fromMetaData(DatabaseType.java:123)
    at org.springframework.batch.core.repository.support.JobRepositoryFactoryBean.afterPropertiesSet(JobRepositoryFactoryBean.java:183)
    at org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer.createJobRepository(DefaultBatchConfigurer.java:134)
    at org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer.initialize(DefaultBatchConfigurer.java:113)
    ... 23 common frames omitted

Мой pom содержит следующие зависимости

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.3</version>
        </dependency>

Примечание. Я попытался выполнить следующий ответ, но все еще получаю то же исключение.

Использование Spring Batch с авто- настроить и нестандартную базу данных


person praxnet    schedule 14.10.2019    source источник
comment
Одна важная деталь: вы хотите использовать Apache Hive в качестве репозитория заданий для Spring Batch или вам просто нужно читать / записывать данные из / в Hive (и использовать другой db для метаданных Spring Batch)?   -  person Mahmoud Ben Hassine    schedule 14.10.2019
comment
@MahmoudBenHassine Спасибо, просто нужно читать / записывать данные из / в Hive (и использовать другой db для метаданных Spring Batch)   -  person praxnet    schedule 14.10.2019
comment
@MahmoudBenHassine На самом деле, я использую весеннюю пакетную версию 4.1.2, весеннюю загрузку версии 2.1.7 и устанавливаю spring.datasource.initialization-mode = never, spring.batch.initialize-schema = never. Я просто хочу подключиться к улью, используя jdbc-url (hikaricp или SimpledataSource) и Kerberos keytab. В этом улье я буду выполнять запросы в hive-tasklet. (примечание: у моего улья нет пароля для имени пользователя)   -  person praxnet    schedule 14.10.2019
comment
Спасибо за обновления. Ошибка означает, что компонент фабрики репозитория заданий пытается использовать куст в качестве источника данных для метаданных пакета Spring. Чтобы использовать другой источник данных, обратите внимание на stackoverflow.com/questions/25540502/   -  person Mahmoud Ben Hassine    schedule 14.10.2019
comment
@MahmoudBenHassine Спасибо за ссылку, Собственно, я не хочу хранить репо вакансий. метаданные (таблицы управления состоянием) также в mysql, который также действует как один из db в моей конвейерной линии ETL   -  person praxnet    schedule 14.10.2019
comment
в этом случае вы можете использовать репозиторий заданий на основе карты (но это не рекомендуется для производства) или использовать встроенную базу данных, такую ​​как HSQL db или H2 (в этом случае вам нужно указать репозиторий заданий для использования встроенного источника данных как показано в предыдущей ссылке).   -  person Mahmoud Ben Hassine    schedule 14.10.2019
comment
@praxnet, не могли бы вы показать статус импорта Datasoucre? ... просто хотел проверить зависимость. У меня такая же проблема   -  person DunJen.coder    schedule 04.09.2020