2016-08-05 1 views
0

Hadoop/Hive 환경을 위해 bean을 구성하려고합니다. 문서화에 따르면 아파치 하둡 설정 클래스가 필요합니다.이 클래스는 자동으로 실행되어야합니다. 참조 : http://docs.spring.io/spring-hadoop/docs/2.4.0.RELEASE/reference/html/springandhadoop-store.html 아직Spring Hadoop config - org.apache.hadoop.conf.Configuration 유형의 정규 Bean이 없습니다.

(섹션 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; 

    ... 

내가 내가 잘못 될 수도, 지금

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', 
    ) 

,하지만 난 autowire가 설정을 사용하는 과거의 기억, 그리고 그것을 잘 작동 : 클라우 데라 클러스터 사용, 여기에 종속됩니다. 최신 버전에서 변경된 사항이 있습니까? 내가 놓친 게 있니?

+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

나는 이미 거기에 갔다. 이 중 상당 부분은 스프링 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이 필요 없다면, 직접 새로운 인스턴스를 생성 할 수 있습니다.

관련 문제