1. 程式人生 > >spring data hadoop操作hive,HiveTemplate的使用

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