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 query = hiveTemplate.query("select name from tablename limit 0,10");
	  for(String x:query) {
		  System.out.println(x);
	  }
	  
	  
	}
	
}

你可能感兴趣的:(java,hadoop)