Hive自定义函数与JDBC链接

自定义函数

编写代码

1.建立一个普通Java工程java

2.导入hive安装目录下lib中全部以hive打头的jar包sql

3.写代码实现一个ToUpper类数据库

package com.jv.hive;

import org.apache.hadoop.hive.ql.exec.UDF;

public class MyToUpper extends UDF{
	public String evaluate(String src) {
		return src.toUpperCase();
	}
}

4.导入jar包apache

5.上传jar包到hive安装目录下的lib中服务器

注册函数

1.添加jar函数

hive> add jar /home/hadoop/proc/apache-hive-1.2.2/lib/mytoupper.jar;oop

输出:性能

2.注册类测试

create temporary function mytoupper as 'com.jv.hive.MyToUpper';lua

输出:

3.测试

select mytoupper(ename) from emp limit 10;

输出:

重要:上面注册的UDF函数是临时的,若是退出hive客户端,再进去就没法使用mytoupper函数

Hive提供了永久注册函数的方式:

create function park.mytoupper as 'com.jv.hive.MyToUpper' using jar 'hdfs://192.168.245.150:9000/user/hive/warehouse/udf/mytoupper.jar'

park是数据库名

jar包须要放到hdfs中

全部客户端链接上来均可以使用mytoupper函数

其余数据库要使用该函数能够加park.mytoupper

建议不要弄太复杂的函数,若是效率低下会严重影响hive的性能,甚至把机器搞挂

jdbc访问Hive

1.在服务器上启动hive service

./hive --service hiveserver2 &

2.在上面的工程中加入hadoop-common-2.7.1.jar包

3.编写代码

package com.jv.hive;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class TestHiveJdbc {
	public static void main(String[] args) throws Exception {
		Class.forName("org.apache.hive.jdbc.HiveDriver");
		Connection conn = DriverManager.getConnection("jdbc:hive2://192.168.245.150:10000/park","root","root");
		Statement stat = conn.createStatement();
		
		/*
		 * 1.若是注册UDF函数是临时的,想要在代码中使用UDF还需从新注册
			String sql = "add jar /home/hadoop/proc/apache-hive-1.2.2/lib/mytoupper.jar";  
			stat.execute(sql);  
	        sql = "create temporary function mytoupper as 'com.jv.hive.MyToUpper'";  
	        stat.execute(sql);  
		 * 2.若是注册UDF函数是永久的,则能够直接使用UDF函数
        */
		ResultSet rs = null;
		rs = stat.executeQuery("select mytoupper(ename) ename from emp limit 10");
		while(rs.next()) {
			System.out.println(rs.getString("ename"));
		}
		stat.close();
		conn.close();
	}
}

 

只是为了演示,因此异常处理都是直接throws

相关文章
相关标签/搜索