2016-08-05 51 views
0

我正在嘗試爲Hadoop/Hive環境配置Bean。根據文檔,我需要Apache Hadoop配置類,它應該是自動裝配的。請參閱:http://docs.spring.io/spring-hadoop/docs/2.4.0.RELEASE/reference/html/springandhadoop-store.html(第6.2.2配置數據集的支持)Spring Hadoop配置 - 沒有符合條件的bean類型org.apache.hadoop.conf.Configuration

然而,當我嘗試運行我的應用程序,我得到: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配置過去的記憶,它工作得很好。最新版本有什麼變化?我錯過了什麼嗎?

+0

http://docs.spring.io/spring-hadoop/docs/2.4.0.RELEASE/reference/html/springandhadoop-config.html#springandhadoop-config-bootsupport - configuration。示例https://github.com/spring-projects/spring-hadoop-samples –

+0

我已經去過了。這很多都需要你編寫Spring XML配置文件,我想避免這些。我從來沒有用過它們,現在一定不要使用它們。 – waste

回答

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配置對象成爲一個bean,因爲我需要將它注入到其中一個類中。如果你不需要bean,你可以自己創建新的實例。

相關問題