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的性能,甚至把机器搞挂
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