轉-Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合

 

Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合

http://blog.csdn.net/balabalayi/article/details/67631726
原創 2017年03月28日 09:10:05

一.POM依賴

 

做者的hadoop集羣環境爲:

HDFS,YARN,MapReduce2 : 2.7.3
Hive : 1.2.1000
HBase : 1.1.2

注:phoenix版本依賴性較強,請注意不一樣發行版之間的差別(直接從集羣服務器上獲取jar包最爲可靠)

[html]  view plain  copy
 
  1. <properties>  
  2.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  3.     <spring-data-hadoop.version>2.4.0.RELEASE</spring-data-hadoop.version>  
  4.     <hive.version>1.2.1</hive.version>  
  5.         <phoenix-client.version>4.7</phoenix-client.version>  
  6.        <druid.version>1.0.27</druid.version>  
  7. </properties>  
  8.   
  9. <dependencies>  
  10.     <dependency>  
  11.         <groupId>org.springframework.boot</groupId>  
  12.         <artifactId>spring-boot-starter-jdbc</artifactId>  
  13.     </dependency>  
  14.     <dependency>  
  15.         <groupId>org.springframework.data</groupId>  
  16.         <artifactId>spring-data-hadoop</artifactId>  
  17.         <version>${spring-data-hadoop.version}</version>  
  18.     </dependency>  
  19.     <dependency>  
  20.         <groupId>org.apache.hive</groupId>  
  21.         <artifactId>hive-jdbc</artifactId>  
  22.         <version>${hive.version}</version>  
  23.     </dependency>  
  24.         <dependency>  
  25.           <groupId>org.apache.phoenix</groupId>  
  26.           <artifactId>phoenix-client</artifactId>  
  27.           <version>${phoenix-client.version}</version>  
  28.      </dependency>  
  29.        <dependency>  
  30.         <groupId>com.alibaba</groupId>  
  31.         <artifactId>druid</artifactId>  
  32.         <version>${druid.version}</version>  
  33.     </dependency>  
  34. </dependencies>  



二.spring boot 配置文件

 

由於spring boot 是默認且推薦採用yaml和properties配置文件的方式。所以,做者在這裏採用yaml方式爲例:html

application.yml:spring

 

[html]  view plain  copy
 
  1. # hive 數據源自定義配置  
  2. hive:  
  3.   url: jdbc:hive2://192.168.61.43:10000/default  
  4.   type: com.alibaba.druid.pool.DruidDataSource  
  5.   driver-class-name: org.apache.hive.jdbc.HiveDriver  
  6.   username: hive  
  7.   password: hive  
  8.   
  9. # phoenix 數據源自定義配置  
  10. phoenix:  
  11.   enable: true  
  12.   url: jdbc:phoenix:192.168.61.43  
  13.   type: com.alibaba.druid.pool.DruidDataSource  
  14.   driver-class-name: org.apache.phoenix.jdbc.PhoenixDriver  
  15.   username:   
  16.   password:   
  17.   default-auto-commit: true  

固然,druid還有不少其它可選配置,請讀者自行斟酌:

 

 

[html]  view plain  copy
 
  1. max-active: 100  
  2. initialSize: 1  
  3. maxWait: 60000  
  4. minIdle: 1  
  5. timeBetweenEvictionRunsMillis: 60000  
  6. minEvictableIdleTimeMillis: 300000  
  7. testWhileIdle: true  
  8. testOnBorrow: false  
  9. testOnReturn: false  
  10. poolPreparedStatements: true  
  11. maxOpenPreparedStatements: 50  

 

 

三.spring boot 配置Bean實現

 

 

由於上述配置信息爲自定義的信息,spring boot 的 auto configuration 並不能徹底理解編碼者的意圖,所以咱們要手動創造數據源Bean:sql

Hive:apache

 

[html]  view plain  copy
 
  1. /**  
  2.  * hive數據源配置  
  3.  * @author chenty  
  4.  *  
  5.  */  
  6. @Configuration  
  7. public class HiveDataSource {  
  8.       
  9.     @Autowired  
  10.     private Environment env;  
  11.   
  12.     @Bean(name = "hiveJdbcDataSource")  
  13.     @Qualifier("hiveJdbcDataSource")  
  14.     public DataSource dataSource() {  
  15.         DruidDataSource dataSource = new DruidDataSource();  
  16.         dataSource.setUrl(env.getProperty("hive.url"));  
  17.         dataSource.setDriverClassName(env.getProperty("hive.driver-class-name"));  
  18.         dataSource.setUsername(env.getProperty("hive.username"));  
  19.         dataSource.setPassword(env.getProperty("hive.password"));  
  20.         return dataSource;  
  21.     }  
  22.       
  23.     @Bean(name = "hiveJdbcTemplate")  
  24.     public JdbcTemplate hiveJdbcTemplate(@Qualifier("hiveJdbcDataSource") DataSource dataSource) {  
  25.         return new JdbcTemplate(dataSource);  
  26.     }  
  27.   
  28. }  

Phoenix:

 

 

[html]  view plain  copy
 
  1. /**  
  2.  * phoenix數據源配置  
  3.  * @author chenty  
  4.  *  
  5.  */  
  6. @Configuration  
  7. public class PhoenixDataSource {  
  8.       
  9.     @Autowired  
  10.     private Environment env;  
  11.   
  12.     @Bean(name = "phoenixJdbcDataSource")  
  13.     @Qualifier("phoenixJdbcDataSource")  
  14.     public DataSource dataSource() {  
  15.         DruidDataSource dataSource = new DruidDataSource();  
  16.         dataSource.setUrl(env.getProperty("phoenix.url"));  
  17.         dataSource.setDriverClassName(env.getProperty("phoenix.driver-class-name"));  
  18.         dataSource.setUsername(env.getProperty("phoenix.username"));//phoenix的用戶名默認爲空  
  19.         dataSource.setPassword(env.getProperty("phoenix.password"));//phoenix的密碼默認爲空  
  20.         dataSource.setDefaultAutoCommit(Boolean.valueOf(env.getProperty("phoenix.default-auto-commit")));  
  21.         return dataSource;  
  22.     }  
  23.          
  24.         @Bean(name = "phoenixJdbcTemplate")  
  25.      public JdbcTemplate phoenixJdbcTemplate(@Qualifier("phoenixJdbcDataSource") DataSource dataSource) {  
  26.           return new JdbcTemplate(dataSource);  
  27.      }  
  28. }  

 

 

 

四.數據源測試

 

 

接下來咱們只需在測試類中,注入 hive/phoenix 的 JdbcTemplate,便可實現 hive/phoenix 的數據交互:服務器

Hive:app

 

[html]  view plain  copy
 
  1. @RunWith(SpringJUnit4ClassRunner.class)  
  2. @SpringApplicationConfiguration(HiveServiceApplication.class)  
  3. public class MainTest {  
  4.       
  5.     @Autowired  
  6.     @Qualifier("hiveJdbcTemplate")  
  7.     JdbcTemplate hiveJdbcTemplate;  
  8.       
  9.     @Test    
  10.     public void DataSourceTest() {   
  11.           
  12.         // create table  
  13.         StringBuffer sql = new StringBuffer("create table IF NOT EXISTS ");  
  14.         sql.append("HIVE_TEST1 ");  
  15.         sql.append("(KEY INT, VALUE STRING) ");  
  16.         sql.append("PARTITIONED BY (S_TIME DATE)"); // 分區存儲  
  17.         sql.append("ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' "); // 定義分隔符  
  18.         sql.append("STORED AS TEXTFILE"); // 做爲文本存儲  
  19.           
  20.         // drop table  
  21. //      StringBuffer sql = new StringBuffer("DROP TABLE IF EXISTS ");  
  22. //      sql.append("HIVE_TEST1");  
  23.           
  24.           
  25.         hiveJdbcTemplate.execute(sql.toString());  
  26.     }   
  27.   
  28. }  

 

Phoenix:spring-boot

 

[html]  view plain  copy
 
  1. @RunWith(SpringJUnit4ClassRunner.class)  
  2. @SpringApplicationConfiguration(HBaseServiceApplication.class)  
  3. public class MainTest {  
  4.       
  5.     @Autowired  
  6.         @Qualifier("phoenixJdbcTemplate")  
  7.        JdbcTemplate phoenixJdbcTemplate;  
  8.       
  9.     @Test    
  10.     public void DataSourceTest() {        
  11.         //phoenix  
  12.         phoenixJdbcTemplate.execute("create table IF NOT EXISTS PHOENIX_TEST2 (ID INTEGER not null primary key, Name varchar(20),Age INTEGER)");  
  13.     }   
  14.   
  15. }  


 


五.傳統方式

 

雖然 spring boot 自己是不推薦傳統的xml配置的,可是實際生產過程當中因各類客觀因素,致使有時咱們不得不引入傳統的xml形式的配置文件。所以針對 hive/phoenix 若是用xml配置文件,而且在spring boot 下如何實現再作下簡單的介紹:oop

application.xml:

 

[html]  view plain  copy
 
  1. <!-- 配置HiveTemplate -->  
  2. <bean id="hiveTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
  3.     <constructor-arg ref="hiveDataSource"/>  
  4.     <qualifier value="hiveTemplate"/>  
  5. </bean>  
  6. <bean id="hiveDataSource" class="com.alibaba.druid.pool.DruidDataSource">  
  7.     <property name="driverClassName" value="org.apache.hive.jdbc.HiveDriver"/>  
  8.     <property name="url" value="jdbc:hive2://172.20.36.212:10000/default"/>  
  9.     <property name="username" value="hive"/>  
  10.     <property name="password" value="hive"/>  
  11.     <!-- 初始化鏈接大小 -->    
  12.     <property name="initialSize" value="0" />    
  13.     <!-- 鏈接池最大使用鏈接數量 -->    
  14.     <property name="maxActive" value="1500" />    
  15.     <!-- 鏈接池最小空閒 -->    
  16.     <property name="minIdle" value="0" />    
  17.     <!-- 獲取鏈接最大等待時間 -->    
  18.     <property name="maxWait" value="60000" />  
  19. </bean>  
  20.   
  21. <!-- 配置PhoenixTemplate -->  
  22. <bean id="phoenixTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
  23.     <constructor-arg ref="phoenixDataSource"/>  
  24.     <qualifier value="phoenixJdbcTemplate"/>  
  25. </bean>  
  26. <bean id="phoenixDataSource" class="com.alibaba.druid.pool.DruidDataSource">  
  27.     <property name="driverClassName" value="org.apache.phoenix.jdbc.PhoenixDriver"/>  
  28.     <property name="url" value="jdbc:phoenix:172.20.36.212"/>    
  29.     <!-- 初始化鏈接大小 -->    
  30.     <property name="initialSize" value="0" />    
  31.     <!-- 鏈接池最大使用鏈接數量 -->    
  32.     <property name="maxActive" value="1500" />    
  33.     <!-- 鏈接池最小空閒 -->    
  34.     <property name="minIdle" value="0" />    
  35.     <!-- 獲取鏈接最大等待時間 -->    
  36.     <property name="maxWait" value="60000" />  
  37.     <!--由於Phoenix進行數據更改時不會自動的commit,必需要添加defaultAutoCommit屬性,不然會致使數據沒法提交的狀況-->    
  38.     <property name="defaultAutoCommit" value="true"/>  
  39. </bean>  

 

實現測試:

 

有了xml配置,咱們只需在上述第四步驟測試類的類定義上加入以下註解,便可實現xml配置文件信息的加載:post

 

[html]  view plain  copy
 
  1. @ImportResource({"classpath:application.xml","..."})  
注意:配置文件中bean的名字要與注入註解的名字一致
相關文章
相關標籤/搜索