2016-08-05 6 views
0

Hadoop/Hive環境用にBeanを設定しようとしています。ドキュメントによると、私はApache Hadoop Configurationクラスが必要です。これはautowiredにする必要があります。参照:まだhttp://docs.spring.io/spring-hadoop/docs/2.4.0.RELEASE/reference/html/springandhadoop-store.html(セクション6.2.2は、データセットのサポートの設定)Spring Hadoop config - タイプorg.apache.hadoop.conf.Configurationの適格なBeanがありません

、私は私のアプリを実行しようとすると、私が取得: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を作成しました。これは、クラスの1つに注入する必要があるためです。 Beanが必要ない場合は、自分で新規インスタンスを作成することができます。

関連する問題