Hadoop 빅 데이터 생태:SpringBoot 통합 hive,spring jdbcTemplate 로 Hive 조작

9753 단어 hadoop
간단 한 소개
  • 개발 도 구 를 사용 하여 hive 클 라 이언 트 를 연결 하고 SpringBoot 와 Hive 의 연결 을 통합 시 키 는 동시에 데이터 의 삭제 와 수정 을 실시한다.
  • hive 연결 을 만 들 고 druid 데이터베이스 연결 탱크 에 넣 고 jdbctemplate 를 자동 으로 주입 합 니 다.
  • 개발 전제:hive 클 라 이언 트 가 설치 되 어 있 습 니 다.블 로 그 를 참고 할 수 있 습 니 다.아 리 클 라 우 드 ECS 7 설치 구축:hive-2.1.1 클 라 이언 트;
  • 버 전 설정:hadop 2.7.6,hive 1.3.3;

  • 실천 하 다.
  • 1.우선 pom 파일 에 hive 의존 을 추가 합 니 다.
  • 
    
    	org.apache.hadoop
    	hadoop-common
    	2.6.0
    
    
    
    	org.apache.hadoop
    	hadoop-mapreduce-client-core
    	2.6.0
    
    
    
    	org.apache.hadoop
    	hadoop-mapreduce-client-common
    	2.6.0
    
    
    
    	org.apache.hadoop
    	hadoop-hdfs
    	2.6.0
    
    
    
    	jdk.tools
    	jdk.tools
    	1.8
    	system
    	${JAVA_HOME}/lib/tools.jar
    
    
    
    	org.springframework.boot
    	spring-boot-configuration-processor
    	true
    
    
    
    
    	org.apache.hive
    	hive-jdbc
    	2.1.1
    	
    		
    			org.eclipse.jetty.aggregate
    			*
    		
    	
    

     
  • 2.파일 yml 을 설정 하고 데이터 원본 속성 설정 을 추가 합 니 다.
  • #       (    hive   )
    spring:
        datasource:
          hive: #hive   
              url: jdbc:hive2://47.100.200.200:9019/default
              type: com.alibaba.druid.pool.DruidDataSource
              username: sixmonth
              password: sixmonth
              driver-class-name: org.apache.hive.jdbc.HiveDriver
          commonConfig: #       ,          
             initialSize: 1
             minIdle: 1
             maxIdle: 5
             maxActive: 50
             maxWait: 10000
             timeBetweenEvictionRunsMillis: 10000
             minEvictableIdleTimeMillis: 300000
             validationQuery: select 'x'
             testWhileIdle: true
             testOnBorrow: false
             testOnReturn: false
             poolPreparedStatements: true
             maxOpenPreparedStatements: 20
             filters: stat	

     
  • 3.새 속성 통일 설정 클래스:DataSource Properties;
  • package com.springboot.sixmonth.common.config.druid;
    
    import java.util.Map;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    /**
     * -       ,        
     * @author sixmonth
     * @Date 2019 5 18 
     *
     */
    @ConfigurationProperties(prefix = DataSourceProperties.DS, ignoreUnknownFields = false)
    public class DataSourceProperties {
    	final static String DS = "spring.datasource";
    	
    	private Map hive;
    	
    	private Map commonConfig;
    	
    
    	/*     ,    set get  ,       */
    
    }

     
  • 4.새 데이터베이스 연결 탱크 연결 속성 클래스,모든 데이터 원본 에 적용 가능:DataSource CommonProperties;
  • package com.springboot.sixmonth.common.config.druid;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    /**
     * -     ,      ,         
     * @author sixmonth
     * @Date 2019 5 18 
     *
     */
    @ConfigurationProperties(prefix = DataSourceCommonProperties.DS, ignoreUnknownFields = false)
    public class DataSourceCommonProperties {
    	final static String DS = "spring.datasource.commonConfig";
    
    	private int initialSize = 10;
    	private int minIdle;
    	private int maxIdle;
    	private int maxActive;
    	private int maxWait;
    	private int timeBetweenEvictionRunsMillis;
    	private int minEvictableIdleTimeMillis;
    	private String validationQuery;
    	private boolean testWhileIdle;
    	private boolean testOnBorrow;
    	private boolean testOnReturn;
    	private boolean poolPreparedStatements;
    	private int maxOpenPreparedStatements;
    	private String filters;
    
    	private String mapperLocations;
    	private String typeAliasPackage;
    
    	/*     ,    set get  ,       */
    	
    }

     
  • 5.hive 데이터 원본 설정 류 를 새로 만 들 고 설정 속성 파일 을 불 러 오고 bean 용기 에 주입 합 니 다:HiveDruidConfig;
  • package com.springboot.sixmonth.common.config.druid.hive;
    
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.springboot.sixmonth.common.config.druid.DataSourceCommonProperties;
    import com.springboot.sixmonth.common.config.druid.DataSourceProperties;
    
    /**
     * -  hive   
     * @author sixmonth
     * @Date 2019 5 18 
     *
     */
    @Configuration
    @EnableConfigurationProperties({DataSourceProperties.class,DataSourceCommonProperties.class})//       bean  , ConfigurationProperties     
    public class HiveDruidConfig {
    
    	    private static Logger logger = LoggerFactory.getLogger(HiveDruidConfig.class);
    
    	    @Autowired
    	    private DataSourceProperties dataSourceProperties;
    	    
    	    @Autowired
    	    private DataSourceCommonProperties dataSourceCommonProperties;
    
    	    @Bean("hiveDruidDataSource") //  bean  
    	    @Qualifier("hiveDruidDataSource")//  
    	    public DataSource dataSource(){
    	        DruidDataSource datasource = new DruidDataSource();
    
    	        //       
    	        datasource.setUrl(dataSourceProperties.getHive().get("url"));
    	        datasource.setUsername(dataSourceProperties.getHive().get("username"));
    	        datasource.setPassword(dataSourceProperties.getHive().get("password"));
    	        datasource.setDriverClassName(dataSourceProperties.getHive().get("driver-class-name"));
    	        
    	        //      
    	        datasource.setInitialSize(dataSourceCommonProperties.getInitialSize());
    	        datasource.setMinIdle(dataSourceCommonProperties.getMinIdle());
    	        datasource.setMaxActive(dataSourceCommonProperties.getMaxActive());
    	        datasource.setMaxWait(dataSourceCommonProperties.getMaxWait());
    	        datasource.setTimeBetweenEvictionRunsMillis(dataSourceCommonProperties.getTimeBetweenEvictionRunsMillis());
    	        datasource.setMinEvictableIdleTimeMillis(dataSourceCommonProperties.getMinEvictableIdleTimeMillis());
    	        datasource.setValidationQuery(dataSourceCommonProperties.getValidationQuery());
    	        datasource.setTestWhileIdle(dataSourceCommonProperties.isTestWhileIdle());
    	        datasource.setTestOnBorrow(dataSourceCommonProperties.isTestOnBorrow());
    	        datasource.setTestOnReturn(dataSourceCommonProperties.isTestOnReturn());
    	        datasource.setPoolPreparedStatements(dataSourceCommonProperties.isPoolPreparedStatements());
    	        try {
    	            datasource.setFilters(dataSourceCommonProperties.getFilters());
    	        } catch (SQLException e) {
    	            logger.error("Druid configuration initialization filter error.", e);
    	        }
    	        return datasource;
    	    }
    	    
    }

     
  • 6.JdbcTemplate 클래스 를 새로 만 들 고 hive 데이터 원본 을 자동 으로 주입 합 니 다:HiveJdbcBaseDaoImpl;
  • package com.springboot.sixmonth.common.config.jdbcConfig;
    
    import javax.sql.DataSource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    /**
     * -  hive   
     * @author sixmonth
     * @Date 2019 5 18 
     *
     */
    @Repository
    public class HiveJdbcBaseDaoImpl {
    	
    	private JdbcTemplate jdbcTemplate;
    
    	public JdbcTemplate getJdbcTemplate() {
    		return jdbcTemplate;
    	}
    
    	@Autowired
    	public void setJdbcTemplate(@Qualifier("hiveDruidDataSource") DataSource dataSource) {
    		this.jdbcTemplate = new JdbcTemplate(dataSource);
    	}
    	
    }

     
  • 7.새로운 테스트 dao 류,hiveJdbctemplate 통합,hql 호출,hive 데이터베이스 데이터 조회:TestHiveDao;
  • package com.springboot.sixmonth.dao.jdbcDao.test;
    
    import org.springframework.stereotype.Repository;
    import com.springboot.sixmonth.common.config.jdbcConfig.HiveJdbcBaseDaoImpl;
    
    /**
     * -  hive  
     * @author sixmonth
     * @Date 2019 5 18 
     *
     */
    @Repository
    public class TestHiveDao extends HiveJdbcBaseDaoImpl{
    
    	/**
    	 *     hive       
    	 * @return
    	 */
    	public String test() {
    		String sql = "SELECT name from sixmonth limit 1";
    		String param = this.getJdbcTemplate().queryForObject(sql,String.class);
    		return param;
    	}
    	
    }
    

     
  • 8.사용 방법:TestHivedao 를 자동 으로 주입 하면 직접 호출 방법 으로 사용 할 수 있 습 니 다.
  • @Autowired
    private TestHiveDao testHiveDao;
    

     
    주의 사항
  • hive 가 연 결 된 사용자 이름과 비밀 번 호 는 hive 가 설치 할 때 사용자 정의 할 수 있 습 니 다.구체 적 으로 블 로그:Hadoop 빅 데이터 생태:Hive 사용자 정의 로 연결 사용자 이름과 비밀 번 호 를 설정 할 수 있 습 니 다.
  • jdbctemplate 가 hive 데이터 원본 을 조작 할 때 사용 하 는 hql 언어 를 기본적으로 지원 하고 자체 적 으로 테스트 할 수 있 습 니 다.
  • Hive 는 관계 형 데이터베이스 와 달리 관계 형 데이터 베 이 스 는 모두 실시 간 으로 조회 하 는 업 무 를 위해 설계 한 것 이 고 Hive 는 대량의 데 이 터 를 위해 데이터 발굴 디자인 을 한 것 으로 실시 간성 이 매우 떨 어 지 며 일반적으로 실시 간 조 회 를 하지 않 는 다.만약 에 실시 간 조 사 를 결합 해 야 한다 면 spark 통합 을 알 수 있다.

  •  
    총결산
  • SpringBoot 는 다양한 데이터 소스 를 통합 할 수 있 습 니 다.본 블 로 그 는 hiv 데이터 소스 의 설정 만 을 대상 으로 다 중 데이터 소스 를 통합 하면 블 로 거들 의 다른 블 로 그 를 참고 할 수 있 습 니 다.SpringBoot 다 중 데이터 소스 설정(hive/my sql);
  • 실천 은 진 리 를 인식 하 는 유일한 기준 으로 스스로 손 을 쓰 고 풍족 하 게 먹 는 것 입 니 다~
  •  

    좋은 웹페이지 즐겨찾기