spring data hadoop操作hive,HiveTemplate的使用
HiveTemplate是一個spring data hadoop封裝好的一個hive操作類,可以提供查詢等方法,很方便,但是返回的資料能是一個欄位
首先需要一個數據源
這裡用dbcp
BasicDataSource
省略set。。。。。。
然後建立一個類HiveClientFactory
HiveClientFactoryBean hiveClientFactoryBean = new HiveClientFactoryBean();
hiveClientFactoryBean.setHiveDataSource(impalaRemoteDataSource(你建立的資料來源));
hiveClientFactoryBean.afterPropertiesSet();
HiveClientFactory hiveClientFactory = hiveClientFactoryBean.getObject();
然後就是HiveTemplate類
很簡單,只需要
HiveTemplate hiveTemplate = new HiveTemplate(hiveClientFactory); // 傳入引數是工廠物件
然後就能用hiveTemplate.query來輸入sql查詢了
如果向要從工廠中拿到原生的Connection,則
Connection conn = hiveClientFactory.getHiveClient().getConnection();
就行了
================================================================================
下面是一個簡單的查詢例子(順便說一下,操作impala可以使用一樣的方法,只是把jdbc連線地址的10000埠換成了21050而已),如果在操作的時候發現有的方法沒有,那說明你spring hadoop的版本有點低,換個高點的,比如我用的2.5.0的
package com.avro; import java.util.List; import org.apache.commons.dbcp.BasicDataSource; import org.junit.Test; import org.springframework.data.hadoop.hive.HiveClientFactory; import org.springframework.data.hadoop.hive.HiveClientFactoryBean; import org.springframework.data.hadoop.hive.HiveTemplate; /** * 連線查詢 * @author root * */ public class HiveTest{ @Test public void test() throws Exception { BasicDataSource bds = new BasicDataSource(); bds.setDriverClassName("org.apache.hive.jdbc.HiveDriver"); bds.setUrl("jdbc:hive2://localhost:10000/base"); bds.setMaxActive(1); bds.setMaxIdle(1); bds.setMinIdle(1); HiveClientFactoryBean hiveClientFactoryBean = new HiveClientFactoryBean(); hiveClientFactoryBean.setHiveDataSource(bds); hiveClientFactoryBean.afterPropertiesSet(); HiveClientFactory factory = hiveClientFactoryBean.getObject(); HiveTemplate hiveTemplate = new HiveTemplate(factory); List<String> query = hiveTemplate.query("select name from tablename limit 0,10"); for(String x:query) { System.out.println(x); } } }