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);
}
}
}