Конфигурация Spring Hadoop - Нет подходящего компонента типа org.apache.hadoop.conf.Configuration
Я пытаюсь настроить bean-компоненты для среды Hadoop/Hive. Согласно документации мне нужен класс конфигурации Apache Hadoop, который должен быть подключен автоматически. См. http://docs.spring.io/spring-hadoop/docs/2.4.0.RELEASE/reference/html/springandhadoop-store.html (раздел 6.2.2 Настройка поддержки набора данных).
Тем не менее, когда я пытаюсь запустить свое приложение, я получаю: NoSuchBeanDefinitionException: No qualifying bean of type [org.apache.hadoop.conf.Configuration] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.
Мой класс очень прост:
@SpringBootApplication
public class HiveTestApp implements CommandLineRunner {
private
@Autowired
org.apache.hadoop.conf.Configuration hadoopConfiguration;
...
Я использую кластер Cloudera, вот зависимости:
dependencies {
compile(
'org.springframework.boot:spring-boot-starter-web',
'org.springframework.data:spring-data-hadoop-hive:2.4.0.RELEASE-cdh5',
'org.apache.hive:hive-jdbc:1.1.0-cdh5.4.3',
)
Теперь я могу ошибаться, но я помню, что в прошлом я использовал конфигурацию autowired, и она работала нормально. Что-нибудь изменилось в последней версии? Я что-то пропустил?
1 ответ
ОК, вот решение.
@Configuration
public class ApplicationConfiguration {
@Value("${com.domain.app.hadoop.fs-uri}")
private URI hdfsUri;
@Value("${com.domain.app.hadoop.user}")
private String user;
@Value("${com.domain.app.hadoop.hive.jdbc-uri}")
private String hiveUri;
@Autowired
private org.apache.hadoop.conf.Configuration hadoopConfiguration;
@Bean
public org.apache.hadoop.conf.Configuration hadoopConfiguration() {
return new org.apache.hadoop.conf.Configuration();
}
@Bean
public HdfsResourceLoader hdfsResourceLoader() {
return new HdfsResourceLoader(hadoopConfiguration, hdfsUri, user);
}
@Bean
public HiveTemplate hiveTemplate() {
return new HiveTemplate(() -> {
final SimpleDriverDataSource dataSource = new SimpleDriverDataSource(new HiveDriver(), hiveUri);
return new HiveClient(dataSource);
});
}
}
Файл конфигурации ниже.
com.domain.app.hadoop:
fs-uri: "hdfs://hadoop-cluster/"
user: "hdfs-user"
hive.jdbc-uri: "jdbc:hive2://hadoop-cluster:10000/hive-db"
Я сделал объект конфигурации Hadoop бином, потому что мне нужно внедрить его в один из классов. Если вам не нужен бин, вы можете просто создать новый экземпляр самостоятельно.