首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring没有org.apache.hadoop.conf.Configuration类型的合格bean

Spring没有org.apache.hadoop.conf.Configuration类型的合格bean
EN

Stack Overflow用户
提问于 2016-08-05 09:47:24
回答 1查看 2.2K关注 0票数 2

我正在尝试为Hadoop/Hive环境配置bean。根据文档,我需要Apache配置类,它应该是自动配置的。参见: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.

我的课很简单:

代码语言:javascript
运行
复制
@SpringBootApplication
public class HiveTestApp implements CommandLineRunner {
    private
    @Autowired
    org.apache.hadoop.conf.Configuration hadoopConfiguration;

    ...

我正在使用Cloudera集群,下面是依赖项:

代码语言:javascript
运行
复制
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',
    )

现在,我可能错了,但我记得在过去,我使用自动配置,它运行良好。最新版本有什么变化吗?我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-08 00:00:36

好的,这是解决办法。

代码语言:javascript
运行
复制
@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);
        });
    }
}

下面的配置文件。

代码语言:javascript
运行
复制
com.domain.app.hadoop:
  fs-uri: "hdfs://hadoop-cluster/"
  user: "hdfs-user"
  hive.jdbc-uri: "jdbc:hive2://hadoop-cluster:10000/hive-db"

我已经使Hadoop配置对象成为一个bean,因为我需要将它注入其中一个类中。如果不需要bean,则只需自己创建新实例即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38786235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档